一种程序数据与代码局部性的量化方法

文档序号:6510908阅读:356来源:国知局
一种程序数据与代码局部性的量化方法
【专利摘要】本发明公开了一种程序数据与代码局部性的量化方法,其过程为:剖析目标程序获取指令访问数据信息、指令与数据的组织信息及热度信息;将上述信息映射到空间几何坐标系中;在空间几何坐标系中建模立方体;将热度信息投射为立方体密度;当给定局部开始与结束位置时,构建局部空间长方体;使用局部空间长方体进行局部性程度计算;在局部性程度计算时建模并使用了立方体体积、密度及质量属性;当指令具有跳转出局部长方体的指令时,将长方体分割为子长方体进行计算。本发明可以从程序特征角度来对程序局部性进行定量。
【专利说明】一种程序数据与代码局部性的量化方法
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其是计算机系统结构领域的程序局部性原理及程 序特征分析及可视化与程序剖析,具体地说是一种程序数据与代码局部性的量化方法。
【背景技术】
[0002]在计算机【技术领域】,人们通过观察程序运行的特征,发现程序运行时有如下现象: 从指令的角度看,程序经常性的需要重复执行其最近执行过的指令;从数据的角度看,程序 经常性的需要重复访问其最近访问过的数据。这种特性被称为局部性原理。由于数据局 部性与指令局部性均是一种经验规律,在系统结构领域多用此经验规律来设计层次存储结 构。程序的指令与数据是独立又统一的,其局部性也是即有独立的方面也有统一的方面,独 立是其属性不同,统一因数据与指令之间关系密切,这也是数据与指令的意义所在。局部性 的根本原因在于指令不仅可以:(依据时间维度)
0,依次从当前执行位置至后序执行位置执行(依序执行);
其还可以:
I,跳跃的从当前执行位置到其增长的位置处,再依序执行;(正跳执行)
2,跳跃的从当前执行位置到其减小的位置处,再依序执行;(负跳执行)
基于跳转及其跳转条件,指令即可以:
0,不执行(执行零次)
I,非重复执行(执行一次)
2,重复执行(执行多次)
因存在上述依序执行(局部相邻)、跳转执行(局部相邻无效)、非重复执行(局部不重复) 及重复执行(局部有条件重复),局部性得以形成。加之计算机程序是人们抽象出来用以处 理各种非重复及重复任务的工具,使得局部性规律成为计算机学科中的重要经验规律。
[0003]基于局部性原理,当前计算机系统中大多都构建了多层次存储结构,以兼顾平衡 成本优势与效率。成本优势与效率间牵制的根本原因在于速度越快的存储结构,其成本越 高。多层次存储结构在构建之初只会对当前系统的可能的载体程序大致进行估量。当层次 存储结构固定后,在层次存储结构实际使用时,其通常便不再变动。而在固定的层次存储结 构上,其仍旧会运行承载具有各式各样用途及各式各样特征的应用程序。再有,在层次存储 结构配置不同的计算系统上,也会运行各种相同的应用的程序。这些不同现象都是大量存 在的。此时,从应用程序的角度,如何高效利用已经固定的存储层次结构便相当重要,如何 高效利用具有不同配置的存储结构的计算系统也是一个值得深入研究的问题。因上述原 因,在如何高效利用已有的存储及计算资源上,应用程序行为、属性及其特性分析便相当重 要。

【发明内容】

[0004]本发明的目的是提供一种程序数据与代码局部性的量化方法,其可以从程序特征角度来对程序局部性进行定量。
[0005]本发明提供的程序特征局部性定量方法,可以可视化程序特征及其局部性,进一 步的对指导分析及认知应用程序提供参考,以便用户认知并分析优化目标程序。
[0006]本发明提供的局部性量化估量方法,从应用程序角度弥补了局部性定量研究方面 的不足。
[0007]本发明的目的是通过下述技术方案实现的:
一种程序数据与代码局部性的量化方法,它包括以下步骤:
a)使用剖析工具(包括编译器、运行时统计分析工具等)对程序的指令特征及数据特征 进行剖析;
b)获取剖析结果:指令访问数据信息、指令及数据的组织信息、运行时热度信息;
c)将步骤b)中获取的结果用作原始程序特征信息来进行后续计算;
d)使用右手坐标系建立空间坐标系OXYZ;
e)在步骤d)中建立的空间坐标系OXYZ基础上,进一步构造可视化程序特征空间坐标 图,使用步骤c)中获取的基础信息向步骤d)中所建立的空间坐标系映射,具体包括:
i )将数据项映射为X轴(即数据维度),将指令项映射为Y轴(即指令维度),将热度项 映射为Z轴(即热度维度);
ii)将指令及数据的组织信息映射为轴内的摆放方式;
iii)将指令使用数据映射为空间坐标中的单位立方体;单位立方体体积V为1,赋予密 度属性P并置初始值为I,得其初始质量M = PV=I5
f)在建立的空间坐标系中放置立方体,具体包括:
i)从原点开始,X轴、Y轴和Z轴分别向其正方向依次使用单位为I的立方空间;
ii)当Y轴指令项第一次访问X轴数据项,在XY相应立方空间坐标处放置立方体,当Y 轴指令项再次访问X轴数据项时,在XY相应立方空间坐标处向上叠加单位立方体;
g)将步骤e)中的热度维度(Z轴)投射为立方体密度,具体包括:
i)定义Zmax为存在立方体的空间坐标的Z分量的最大值;
ii)使用Z=Zmax处的XY平面向Z轴负方向挤压,停止于Z=I处的XY平面;
iii)将各XY坐标处存在的立方体密度P设为其投射之前立方柱高度;
h)使用投射后的程序空间坐标图计算局部性程度,具体包括:
i)定义Xmax为存在立方体的空间坐标的X分量的最大值,Ymax为存在立方体的空间 坐标的Y分量的最大值;
ii)定义局部性程度计算的输入为[Ys,Ye];Ys为目标局部的Y轴坐标的开始处,Ye为 目标局部的Y轴坐标结束处,0 <= Ys < Ye <= Ymax ;
iii)计算[Xs,Xe]:使用X= 0处的YZ平面向X轴正向移动,当其受到[Ys,Ye]范围的 立方体表面阻止时停止,令Xs等于停止位置处的X坐标;使用X = Xmax处的YZ平面向X 轴负向移动,当其受到[Ys,Ye]范围内的立方体表面阻止时停止,令Xe等于停止位置处的 X坐标;
iv)当前程序空间坐标图中的平面X-Xs = 0,X-Xe = 0,Y-Ys = 0,Y-Ye = 0,Z =0, Z -1 =0确定了目标局部的长方体表示;
j )设局部性程度为L (Ys, Ye),使用步骤h)中iv)确定的目标局部的长方体表示及其相关属性(包括密度、边沿等),计算目标局部的局部性程度,具体包括:
i)当局部内部无跳转跳出长方体范围时,有
L (Ys, Ye) = M (Xs, Xe, Ys, Ye, 0,I) /V (Xs, Xe, Ys, Ye, 0,I)
=(E (P XiYj * V(Xi,Xi+l,Yj,Yj+l,0,I))) /((Xe-Xs) * (Ye-Ys))
其中,M(Xs,Xe,Ys,Ye,0, I)指长方体的质量,V(Xs, Xe, Ys, Ye, 0, I)为长方体的体积, P XiYi 为平面 X-Xi = 0,X - (Xi + I) = 0,Y - Yj = 0,Y - (Yj + I) = 0,Z = 0,Z -1 =
0所围的立方体的投射密度,Xi和Yi均为整数且Xi G [Xl,X2-l]、Yj G [Y1,Y2-1];
ii)当局部内部有跳转跳出立方体范围时,使用跳转位置的XZ平面切分当前长方体; 设当前长方体被切分成的子长方体数为n,切分位置Y分量坐标分别为(Yl, Y2, Y3…Yn-1), 其跳转方向对应为(D1,D2,…Dn-1),对任意的Di(l〈=i〈=n-1)有Di = Ys或Di = Ye ;Di = Ys表示跳转方向为Y轴负向,Di = Ye表示跳转方向为Y轴正向;对每一个子长方体,分别计算其局部性程度:
L(Ys1Yl) = M(Xs, Xe, Ys, Y1,0, I)/(V(Xs, Xe, Ys, Yl, 0, I) + V(XI, X2, Yl, Dl, 0, I)) L(Y1,Y2) = M(Xs, Xe, Y1,Y2, 0, I)/(V(Xs, Xe, Yl, Y2, 0, I) + V(XI, X2, Yl, D2, 0, I))
L (Yn-1, Ye) = M(Xs, Xe, Yn-1, Ye, 0, I) / (V (Xs, Xe, Yn-1, Ye) + V (XI, X2, Yn-1, Ye, 0,I)) 使用上述计算的局部性程度结果作为子长方体修正密度,用此修正密度计算子长方体的质量:
M(Ys1Yl) = L(Ys1Yl) * V (Xs, Xe, Ys, Yl, 0,I)
M(Y1,Y2) = L(Y1,Y2) * V(Xs, Xe, Yl, Y2, 0,I)`M(Yn-2, Yn-1) = L (Yn_2, Yn_l) * V (Xs, Xe, Yn_2, Yn_l, 0,I)
M(Yn-11Ye) = L(Yn-11Ye) * V (Xs, Xe, Yn-1, Ye, 0, I)
使用上述计算结果再次计算局部性程度:
L(Ys1Ye) = (M(Ys1Yl) + M (Yl, Y2)…+ M(Yn-1, Ye)) /V (Xs, Xe, Ys, Ye, 0, I) ?
[0008]所述编译器为gcc,运行时统计分析工具为SimpleScalar工具链,gprof, valgrindo
[0009]本发明使用右手坐标系即笛卡尔空间坐标系来定义多维空间几何坐标系,其中:
1)X轴映射为数据维度,数据项(Data Item)依据其在程序中的逻辑位置从坐标原点依次向X轴正向摆放,单位为I ;
2)Y轴映射为指令维度,指令项(Instruction Item)依据其在程序中的逻辑位置从坐标原点一次向Y轴正向摆放,单位为I ;
3)Z轴映射为热度维度,其用于指示数据及指令的热度(其实质为数据访问指令的热度)。
[0010]在上述定义的坐标系中,定义立方体,其长宽高均为I。在上述定义的坐标系的单位立方空间中,可以存在或不存在立方体。当存在某个立方体时,说明当前坐标系单位立方空间Y轴上的指令项访问X轴上的数据项一次。如果当前坐标系单位立方空间Y轴上的指令项访问X轴上的数据项多次及在当前立方体上向Z轴正向方向叠放多个立方体。对于上述定义的立方体,给予立方体初始密度均为单位I。进一步的,在上述定义的坐标系中,将热度维度(Z轴)投射为立方体密度,方法为:使用Z=最高立方体坐标处XOY平面向Z=O坐标 处的XOY平面方向挤压,停止于Z=I处的XOY平面。变化Z轴高度为当前XY坐标处的单位 立方体密度。
[0011]本发明定义局部性程度为局部区域平均密度的函数,其合理性在于平均密度的函 数同时包括了组织信息、热度信息及指令访问数据信息。对于给定局部,若局部中的跳转均 未跳转出当前局部长方体,则局部性程度为平均密度。对于给定局部,若局部中的跳转跳出 了当前局部长方体时,则将当前局部长方体分割为子长方体,计算子长方体的修正密度;修 正密度主要用更大的相关长方体体积包围子长方体,即用较大的体积均匀分布质量;再次 使用子长方体的修正密度计算子长方体的质量;令局部长方体的质量等于所有子长方体的 质量之和;使用新计算的局部长方体质量除以长方体体积,计算得局部区域密度用作此类 情况下的局部性程度。分割的意义在于跳转会带来局部相邻无效,减弱了内部相邻耦合。
[0012]本发明解决了程序局部性仅有定性说明的问题,充分利用了目标程序的指令访问 数据信息、指令及数据组织信息和热度信息,使用空间几何坐标系,建模了空间体积、空间 质量及空间密度特征,建立了局部性量化的概念、流程及相关方法。其带来的效果有:
I)使用本发明,对程序进行特征可视化。
[0013]2)使用本发明,通过源代码静态解释方式获得信息,可以在源代码级别进行局部 性量化分析;通过运行时分析方式,可以在汇编代码级别进行局部性量化分析。
[0014]3)使用本发明,通过建立不同的几何映射方式、维度变换方法及空间分割方法,可 以进行局部性与程序特征分析。使用本发明,可单独计算数据维度或指令维度的离散及聚 集特征,对其组织方式进行优化。
【专利附图】

【附图说明】
[0015]图1为本发明流程图;
图2为本发明空间坐标系与单位立方体示意图;
图3为本发明空间坐标系中的立方体填充示意图,其中:左图为Y方向两个指令项访问 了 X方向的一个数据项各一次;中图为Y方向一个指令项访问了 X方向的两个数据项各一 次;右图为Y方向一个指令项访问了 X方向的一个数据项共两次;
图4为本发明热度投射为密度过程示意图;
图5为本发明实施例的程序局部空间坐标可视化示例图。
【具体实施方式】
[0016]现结合附图对本
【发明内容】
进行详细描述:
参阅图1,给定目标程序,首先选用编译或解释剖析工具对目标程序进行剖析,获得基 本的程序指令特性、程序指令访问数据信息、指令及数据的组织信息及相关热度等,将其作 为后续可视化及计算程序局部性的基本信息。
[0017]当完成上述步骤后,使用其结果作为输入,进一步构造后续计算的基础数据及数 据结构。完成后再次请求用户输入目标局部范围,此局部范围将用作用户考察的对象。
[0018]使用上述步骤的结果进行后续处理:
I)构建如图2左图所示空间坐标系,此坐标系将用作放置如图2右部所示的单位立方体。
[0019]2)基于I)的步骤,在坐标系空间中放置单位立方体,放置条件为Y维度指令项访问X维度数据项时。放置结果的组合方式如图3所示:
a)当指令维度(Y轴)的两个指令项访问了数据维度(X轴)的同一个数据项时,使用如图3中左部所示视图放置。
[0020]b)当指令维度(Y轴)的一个指令项访问了数据维度(X轴)的两个相邻数据项时, 使用如图3中部所示视图放置。
[0021]c)当指令维度(Y轴)的一个指令项再次访问了数据维度(X轴)的同一个数据项时,使用如图3右部所示视图放置。图3右图所示视图仅指示了2次访问的情况,当多次访问时,与其类似。
[0022]3)基于步骤2),进一步进行热度投射密度操作:
a)如图4所示过程,令Zmax为存在立方体的空间坐标的Z分量最大值,使用Z = Zmax 出的XY平面向Z轴负方向挤压,停止与Z = I处的XY平面。
[0023]b)将投射前的长方柱高度(即Z轴热度)作为投射后的立方体密度P。如图4中部所示视图,其密度已改变。
[0024]c)如图4中右部所示视图为从Z轴正坐标处向Z轴负坐标看去的俯视图。
[0025]4 )用户给定的目标局部范围,使用步骤3 )处理后的结果:
a)扫描目标局部范围构建出目标局部长方体;
b)对目标长方体进行是否分割判定,如目标长方体中具有跳转出长方体边界的指令, 则长方体需切割为子长方体,反之则不许切分为子长方体。对于无需切分的长方体使用后续步骤c)计算局部性程度;对于需要切分的长方体使用后续步骤d)计算局部性程度。
[0026]c)使用如下公式计算,过程同技术方案的步骤j中i ):
L(Ys1Ye) = ( E ( P XiYj` * V (Xi, Xi+1, Yj, Yj+1, 0,I))) / ((Xe-Xs) * (Ye-Ys))
d)使用如下公式计算,过程同技术方案的步骤j中ii ):
L(Ys1Ye) = (M(Ys1Yl) + M (Yl, Y2)…+ M(Yn-1, Ye)) /V (Xs, Xe, Ys, Ye, 0, I)
5)输出局部性程度:向用户输出局部性程度及可选的输出中间过程的运算结果及可视化结果。
【权利要求】
1.一种程序数据与代码局部性的量化方法,其特征在于包括以下步骤:a)使用剖析工具对程序的指令特征及数据特征进行剖析;b)获取剖析结果:指令访问数据信息、指令及数据的组织信息、运行时热度信息;c)将步骤b)中获取的结果用作原始程序特征信息来进行后续计算;d)使用右手坐标系建立空间坐标系OXYZ;e)在步骤d)中建立的空间坐标系OXYZ基础上,进一步构造可视化程序特征空间坐标图,使用步骤c)中获取的基础信息向步骤d)中所建立的空间坐标系映射,具体包括:i )将数据项映射为X轴即数据维度,将指令项映射为Y轴即指令维度,将热度项映射为Z轴即热度维度;ii)将指令及数据的组织信息映射为轴内的摆放方式;iii)将指令使用数据映射为空间坐标中的单位立方体;单位立方体体积V为1,赋予密度属性P并置初始值为I,得其初始质量M = PV=I5f)在建立的空间坐标系中放置立方体,具体包括:i)从原点开始,X轴、Y轴和Z轴分别向其正方向依次使用单位为I的立方空间;ii)当Y轴指令项第一 次访问X轴数据项,在XY相应立方空间坐标处放置立方体,当Y 轴指令项再次访问X轴数据项时,在XY相应立方空间坐标处向上叠加单位立方体;g)将步骤e)中的热度维度(Z轴)投射为立方体密度,具体包括:i)定义Zmax为存在立方体的空间坐标的Z分量的最大值;ii)使用Z=Zmax处的XY平面向Z轴负方向挤压,停止于Z=I处的XY平面; iii)将各XY坐标处存在的立方体密度P设为其投射之前立方柱高度;使用投射后的程序空间坐标图计算局部性程度,具体包括:i)定义Xmax为存在立方体的空间坐标的X分量的最大值,Ymax为存在立方体的空间坐标的Y分量的最大值;ii)定义局部性程度计算的输入为[Ys,Ye];Ys为目标局部的Y轴坐标的开始处,Ye为目标局部的Y轴坐标结束处,0 <= Ys < Ye <= Ymax ;iii)计算[Xs,Xe]:使用X= 0处的YZ平面向X轴正向移动,当其受到[Ys,Ye]范围的立方体表面阻止时停止,令Xs等于停止位置处的X坐标;使用X = Xmax处的YZ平面向X 轴负向移动,当其受到[Ys,Ye]范围内的立方体表面阻止时停止,令Xe等于停止位置处的 X坐标;iv)当前程序空间坐标图中的平面X-Xs = 0,X-Xe = 0,Y-Ys = 0,Y-Ye = 0,Z =0, Z -1 =0确定了目标局部的长方体表示;j)设局部性程度为L(Ys,Ye),使用步骤h)中iv)确定的目标局部的长方体表示及其相关属性包括密度、边沿,计算目标局部的局部性程度,具体包括:i)当局部内部无跳转跳出长方体范围时,有 L (Ys, Ye) = M (Xs, Xe, Ys, Ye, 0,I) /V (Xs, Xe, Ys, Ye, 0,I)=(E (P XiYj * V(Xi,Xi+l,Yj,Yj+l,0,I))) /((Xe-Xs) * (Ye-Ys))其中,M(Xs,Xe,Ys,Ye,0, I)指长方体的质量,V(Xs, Xe, Ys, Ye, 0, I)为长方体的体积, P XiYi 为平面 X-Xi = 0,X - (Xi + I) = 0,Y - Yj = 0,Y - (Yj + I) = 0,Z = 0,Z -1 =0所围的立方体的投射密度,Xi和Yi均为整数且Xi G [Xl,X2-l]、Yj G [Y1,Y2-1];ii)当局部内部有跳转跳出立方体范围时,使用跳转位置的XZ平面切分当前长方体; 设当前长方体被切分成的子长方体数为n,切分位置Y分量坐标分别为(Yl, Y2, Y3…Yn-1), 其跳转方向对应为(01,02广..011-1),对任意的01(1〈=1〈=11-1)有01 = Ys或Di = Ye ;Di = Ys表示跳转方向为Y轴负向,Di = Ye表示跳转方向为Y轴正向;对每一个子长方体,分别计算其局部性程度:L(Ys1Yl) = M(Xs, Xe, Ys, Y1,0, I)/(V(Xs, Xe, Ys, Yl, 0, I) + V(XI, X2, Yl, Dl, 0, I))L(Y1,Y2) = M(Xs, Xe, Y1,Y2, 0, I)/(V(Xs, Xe, Yl, Y2, 0, I) + V(XI, X2, Yl, D2, 0, I))L(Yn-1, Ye) = M (Xs,Xe,Yn -1,Ye,0,I)/(V (Xs,Xe,Yn-1,Ye) + V(X1,X2, Yn-11Ye, 0, I))使用上述计算的局部性程度结果作为子长方体修正密度,用此修正密度计算子长方体的质量:M(Ys1Yl) = L(Ys1Yl) * V (Xs, Xe, Ys, Yl, 0,I)M(Y1,Y2) = L(Y1,Y2) * V(Xs, Xe, Yl, Y2, 0,I)M(Yn-2, Yn-1) = L (Yn_2, Yn_l) * V (Xs, Xe, Yn_2, Yn_l, 0,I)M(Yn-11Ye) = L(Yn-11Ye) * V (Xs, Xe, Yn-1, Ye, 0, I)使用上述计算结果再次计算局部性程度:`L(Ys1Ye) = (M(Ys1Yl) + M (Yl, Y2)…+ M(Yn-1, Ye)) /V (Xs, Xe, Ys, Ye, 0, I);其中:所述剖析工具为编译器及运行时统计分析工具。
【文档编号】G06F9/45GK103500117SQ201310408418
【公开日】2014年1月8日 申请日期:2013年9月10日 优先权日:2013年9月10日
【发明者】蔡根, 杨艳琴, 徐文超 申请人:华东师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1