网格中比较CPU计算能力的一种方法
2012-04-06 来源:吉林大学学报
引 言
在网格计算中,常常需要使用多台计算机协同工作完成一台超级计算机才能完成的计算任务,为实现上述目标,首先应通过网格信息服务获得网格中各台主机CPU计算能力的指标,然后进行判断选择,决定由哪些主机参与计算。
当前,已有的网格信息服务模块、网格监控模块,如MDS2将系统平均负载作为反映CPU状态的动态指标提供给用户;另外,通过系统命令或系统调用也可以获得 CPU使用率这个动态指标。系统平均负载是在特定时间间隔内运行队列中的平均进程数,CPU使用率表示CPU使用程度的指标,能够反映出CPU的工作状态,但由于网格中CPU型号性能的差异,因此,无法用它们直接比较网格中CPU的计算能力。
为直接比较网格中主机 CPU的计算能力,获得具有可比性的反映CPU计算能力的指标,我们采用计算量动态选择算法,在各台主机上周期性地瞬间执行计算量适中的Whestone 基准计算,通过PAPI接口编程对CPU所完成的浮点数计算进行精确计数,用得到的每秒百万浮点数MFLOPS作为比较主机CPU计算能力的指标,定义为 WMFLOPS。得到WMFLOPS后,通过Globus提供的监控和发现服务(Monitoring and Discovery Service,MDS),将该指标作为资源信息进行发布,作为比较网格节点CPU计算能力的依据,为用户选择计算节点提供参考。我们编写了程序 WfpSensor用于上述方法的实现。WfpSensor作为传感器工作于网格中的各个节点,周期性地对CPU进行计算测试,获得WMFLOPS的返回值,同时,WfpSensor也是MDS服务中的本地信息提供者,定时将最新的WMFLOPS值传递给MDS系统,供用户查阅。
计算测试子程序
CPU 的计算能力主要体现在浮点数计算能力、定点数计算能力和矩阵计算能力等方面,其中某一类程序在CPU上运行的效果并不能全面地反映CPU的计算能力,所以许多国际基准组织开发了测试CPU计算能力的基准测试程序,在这类程序中进行的操作和运算可以相对全面客观地考察CPU的计算能力。本文方法采用综合型基准测试程序Whestone作为WfpSensor的计算测试子程序,Whestone程序中主要包括浮点运算、整数运算、涉及到数组下标索引、子程序调用、参数传递、条件转移和三角/超越函数等,可以综合考察CPU提供的计算能力。
返回指标WM FLOPS
WfpSensor 进程对CPU进行计算测试后,取出CPU在测试过程中的指标来反映CPU的计算能力。绝大多数网格计算都是科学计算,而浮点计算是科学计算程序中最主要的计算,所以选用每秒百万浮点数MFLOPS作为反映CPU计算能力的指标。MFLOPS反映了CPU的浮点计算能力,并且MFLOPS是基于操作而非指令的,可以用它来比较两种不同CPU的计算能力。由于是调用Whestone程序进行测试所得的结果,因此定义该指标为WMFLOPS。
指标精确计数
指标确定后,如何在WfpSensor中精确得到Whestone计算结束后的WMFLOPS值成为问题的关键。由美国田纳西大学计算机学院创新计算实验室开发的标准应用编程接口PAPI( portable application programming interface)能够满足上述要求。该软件通过CPU上的硬件计数器,对CPU运行时产生的某些事件进行计数,并建立了一个标准应用编程接口方便用户读出计数器的值,通过这些值就可以了解当前CPU的工作状态。由于CPU生产厂商及型号的不同,CPU硬件计数器所计数的硬件事件会有所不同,为标准化指标的名称,使同一工具可以计数相似的可比较事件,促进跨平台调试程序的能力,PAPI开发者选择了一套和调试应用程序相关的硬件事件称为预定义事件,作为反映CPU当前工作状态的指标。这些指标是跨平台的通用事件,包括了大部分主流RISC类事件,并且尽可能把这些预定义事件映射到给定CPU的硬件计数器事件中。在本文方法中,使用了PAPI_FP_INS这个PAPI预定义事件,它表示进程执行过程中完成的浮点数计算。PAPI提供了精确的计时器,精确到微秒,能够准确地对进程的执行时间进行计时,如果经计数,PAPI_FP_INS事件总数为n,计算执行时间为t(单位:μs) ,那么WMFLOPS=n/t。
计算量动态选择
采用计算测试CPU的计算能力,必须保证以下两点:
(1) 测试进程应尽可能不影响CPU的正常工作,当然由于测试进程的引入必将影响到CPU正常运行,应设法让这种影响降到一个可以接受的程度,并且使计算给系统带来的开销尽可能小。
(2) 测试进程要有一定的计算量,如果计算量过小,会使初始化、函数调用等操作消耗的时间在进程的执行时间t中占有较大的比重,从而使WMFLOPS的值比真实值小,影响测试结果的精确性。
为同时保证(1)需要较小的计算量和(2)需要较大的计算量,选择合适的测试计算量十分重要,为此,提出采用计算量动态选择的算法确定计算量。
计算量的大小控制可以通过改变WfpSensor中调用Whestone程序的次数(NUM_LOOPS)实现。假定使计算执行时间t(单位:s)在 0.5~1.5的计算量是合理值,计算量调节系数为xs。WfpSensor启动时,NUM_LOOPS赋初值。调用Whestone计算结束后,如果:
(1) 0.5≤t≤1.5,在合理区间内,NUM_LOOPS的值保持不变。
(2) t>1.5,计算量偏大,下次测试应减小Whestone的调用次数,则NUM_LOOPS=NUM_LOOPS/xs。xs为t四舍五入后的整数值。
(3) t<0.5,计算量偏小,下次测试应增加Whestone的调用次数,则NUM_LOOPS=NUM_LOOPS3xs。xs为(1/t)四舍五入后的整数值。
具体算法如下:
start_usec=PAPI_get_real_usec();//通过PAPI函数获得计算开始时的时刻
do_wst(NUM_LOOPS);//Whestone写成函数,对它进行调用,NUM_LOOPS是调用次数
end_usec=PAPI_get_real_usec();//通过PAPI函数获得计算结束时的时刻
t=(end_usec-start_usec);//获得计算执行的时间
if(t>1.5)//根据本次计算执行时间决定下次测试的调用次数
{
if((t-floor(t))>0.5)//取最靠近t的整数
xs=floor(t)+1;
else
xs=floor(t)
NUM_LOOPS=NUM_LOOPS/xs;//修改调用次数
}
else
if(t<0.5)
{
if((1/t-floor(1/t))>0.5)//取最靠近1/t的整数
xs=floor(1/t)+1;
else
xs=floor(1/t);
NUM_LOOPS =NUM_LOOPS3xs;//修改调用次数
}
性能评价
为证实本文方法检测CPU计算能力的效果,在使用Intel赛扬1.3 GHz CPU的主机上(操作系统为WindowsXP),运行WfpSensor,做以下实验。在实验中,使用计算π值的科学计算软件Superπ和另一基准测试软件Linpack作为主机的计算任务,WfpSensor设置为每10s采样一次。为使检测效果具有可比性,我们编写了检测CPU使用率的另一程序 CPUusage对CPU的使用率进行记录,CPUusage也是每10s采样一次。在同样的计算条件下,分别由WfpSensor和CPUusage对 CPU的计算能力进行测试。
稳定性
本实验检测WfpSensor和 CPUusage测试数据的稳定性,机器启动后,不运行任何程序,分别用WfpSensor和CPUusage进行5min测试,所得 WMFLOPS,NUM_LOOPS和CPU使用率如图1所示,NUM_LOOPS初始值为4000。
由图1可见,在未运行任何用户程序时,与CPUusage所测数据一样,WfpSensor所测数据是稳定的,都可以反映出CPU的计算能力。
图1
灵敏性
检测WfpSensor和CPUusage对CPU计算负载变化的灵敏性。在监控程序启动35s后,运行Superπ(计算1M位π值),再过45s运行 Linpack。5min15s结束测试,所得WMFLOPS,NUM_LOOPS和CPU使用率如图2所示。
图2
由图2可见,WfpSensor能够根据CPU当前状态自动选择计算量,WMFLOPS的值能够反映出CPU计算能力的动态变化情况,而CPU使用率的值则不能动态反映CPU的计算能力。
测试开销
用测试计算的运行时间说明这个问题。在图2(A)的实验中,记录了测试计算的执行时间如图3所示。在设计算法时,已假定测试计算执行时间在0.5~1.5 s范围内是合理值,即为可以接受的测试开销。如图3所示,除4个拐点的测试计算执行时间值外,其他测试计算执行时间值稳定于1s左右,符合要求。当然,如果认为1 s的测试执行时间开销较大,还可以根据实际情况修改算法,设置合理的测试计算执行时间的区间。
图3
实验结论
以上实验数据证明,WfpSensor将PAPI和Whestone结合使用测试CPU计算能力的方法是可行的,而且准确、有效。动态计算量的选择保证了 WfpSensor的测试计算开销保持在合理的范围内,PAPI提供的独立于硬件和操作系统的编程接口保证了返回指标计数的精确性。
WfpSensor的网格应用
WfpSenor跨平台使用的可行性
WfpSensor 的返回指标WMFLOPS可以反映出一台主机CPU不同时刻的计算能力,可以用于相同平台或不同平台主机CPU计算能力的比较。首先,WMFLOPS是 Whestone程序结束后返回的MFLOPS值,浮点计算是基于操作而非指令的,所以它可以用来比较不同CPU的计算能力。其次,WMFLOPS是使用 PAPI编程接口通过CPU硬件计数器对PAPI_FP_INS事件进行计数的值除以测试进程的执行时间t得到的,PAPI具有跨平台性,这为 WfpSensor应用于具有较大物理异构性的网格环境提供了极大的支持;同时,PAPI_FP_INS是PAPI定义的标准化预定义事件,对于不同 CPU的比较更具参考性。
WfpSensor数据的发布
采用Globus中的监控和发现服务(MDS)将WfpSensor测得的WMFLOPS值发布出来,供用户查询和订阅。MDS的功能包括信息的发现、注册、查询、修改、注销等。WfpSensor作为WMFLOPS信息的提供者通过软状态注册协议向MDS进行注册,并定期向MDS提供数据,用户可以通过MDS系统查询网格中各主机CPU的WMFLOPS值,用户也可以向MDS订阅WMFLOPS信息,从而了解WMFLOPS值的更新和变化。
CPU计算能力的比较
WMFLOPS 值反映了某一时刻主机CPU所能提供给新进程的计算能力,因此WMFLOPS值越大,则说明主机CPU所能提供的计算能力越强。例如,用户需要选取网格中的几个节点进行网格计算,通过MDS查询得到网格中5个节点A,B,C,D,E的最新WMFLOPS值分别为 150.78,89.65,225.38,50.22,189.62,如果仅从CPU计算能力方面考虑,则节点选择的顺序依次为C,E,A,B,D。也可以将WMFLOPS值结合MDS提供的内存使用率等系统信息综合考虑选择计算节点。
综上可见,本文提出了一种对网格中各节点CPU计算能力进行直接比较的方法。基准计算测试程序的应用保证了测试的全面性、客观性;计算量动态选择算法保证了测试进程既能精确地进行测试,又不至于给系统带来过多的开销;通过PAPI接口,利用CPU计数器对指标精确计数,保证了数据的准确性;PAPI的跨平台性保证了本方法可以应用于软硬件差别较大的网格环境中。实验证明,本文方法能够稳定、灵敏地反映CPU的计算能力,用其比较不同CPU的计算能力正确、有效。