whetstone-Benchmark_第1页
whetstone-Benchmark_第2页
whetstone-Benchmark_第3页
whetstone-Benchmark_第4页
whetstone-Benchmark_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 Whetstone的设计Whetstorte基准程序是H JCurnow 和B AWiehmarm在1976年研制成的。它是ALGOL语句混合(statement mix)的一种发展。它的基本原则是:在程序编译后生成的机器指令中,各种指令出现的频度应和统计数据中指令出现频度相符合。程序的研制是基于对语言使用的统计分析的。1970年Wichmann在NPL和牛津大学对949个程序进行了分析。在Whetstone系统上,ALGOL程序首先被译为一种中间代码,然后由一个解释程序执行。通过修改翻译器和解释程序可得到关于程序的静态和动态统计数据,根据这些统计数据,Curnow和Wiehmarm设计了

2、一个合成基准程序,它对科学计算型应用有较强的代表性。程序的设计是在简单性和复杂性两种要求之间的一个妥协。程序必须足够简单, 以便从一个机器移植到另一个机器,从一种语言译到另一种语言,还必须能够生成whetstone中间代码,以便计算不同指令出现频度,把它们和统计数据相匹配。但是如果程序过于筒单,那么在通过有优化的编译程序中,很可能有些部分不被执行,如果它们不是逻辑上必需的话。另外,对极其简单的程序,编译程序可以完全用快速寄存器来作临时数据存贮。从而产生极高速的运行。显然程序必须有一定的复杂度从而能具有典型性。最好的方法是确保程序能被逻辑地优化,而且通过把程序写的自然点,使得快速寄存器和摹本硬件

3、特性的使用基本上正确,程序编写时最好不要用某一语言专有的成份,以便用于具有相似子集的不同语言的比较。研制合成基准程序的一个较好的方式是设计一些模块,各个模块使用语言的各种特性。每个模块可代表一种运算,包含在一个循环中运行多次,模块的每次运行最好产生不同的结果,但同时又要注意能够无穷多以重复执行而不产生数值溢出或其它差错,模块的结构和循环次数应选择和设计得使程序产生的whetstone指令的频度和949个程序统计得来的数据一致。关于将基准程序和分折数据进行匹配的方法的选择也是应着重考虑的事。应该用相对而言比较少的模块循环控制变量实现尽可能多的指令匹配,一种方法是用最小二乘法。较好的方法是根据指令

4、的出现频度和执行时间加权。从而给较重要的指令以较大的权重。模块本身也经过多次设计和修改以获得最好的效果。2 程序的结构whetstone程序的结构很简单。它由8个模块(还有3个模块,但循环变量为0,忽略)组成,每个模块考虑一种运算,用一个循环变量控制,整个合成基准程序由对应8个模块的8个循环语句组成其循环次数分别为n1,n2,······n8。通过控制它们的相对值,可以改变整个程序中各个指令出现的频度。模块的运算应该是一般的基本运算。它的设计准则是:每次执行产生不同的结果同时又能无限以循环运算而不溢出或出现其它偏差。程序中用的基本算术

5、运算是一组语句:x1 = (x1+ x2+x3-x4)* 0 .5;x2=( x1+ x2-x3+x4)* 0. 5;x3= (x1-x2+x3+x4)* 0 .5;x4=( -x1+ x2+x3+x4)*0. 5;从理论上说,上述变换以任意初始值开始都会收敛到x1= x2=x3=x4=1.0。这就满足了关于模块运算的准则。考虑到机器精确性的限制和使每次计算结果不同,用0.499975代替因子0.5。x1到x4的初值可任意选定,程序中用的是x1=1.0,x2=x3=x4=-1.0。上述模式的运算在二个模块中使用(模块1,2) 。其中变量分别为简单变元,数组元素和做子程序调用参数的数组元素。在过

6、程pa中也使用了一个循环,用于控制参数调用对过程调用的比例。模块3是测试条件转移的。它由一组条件语句组成,形式如下:if j =1then j=2else j= 3;if j> 2 then j= 0else j= 1;if j < lthen j=1else j=0;如果选定j的权值为1,那么j的值一直在0,1之间变化,每个条件都轮流为真和假,这样条件和j的值每次都变化而又不会出现别的问题。模块4测试整数运算和数组存取。形式如下:j = j *(k-j)*(l-k);k = l * k - (l-j) * k;l= (l-k) * (k+j);e1l-2 = j + k + l;

7、e1k-2 = j * k * l;当j,k,l的初值分别取为1,2,3时,每次计算产生的结果相同j,k,l的值不变,由于计算的式子比较复杂,所以编译程序不大可能看出来而给予优化。模块5测试关于三角函数的计算。选择的计算式子是:x = t*atan(2.0*sin(x)*cos(x)/(cos(x+y)+cos(x-y)-1.0);y = t*atan(2.0*sin(y)*cos(y)/(cos(x+y)+cos(x-y)-1.0);当取值t=0.99975, x=y=0.5时,这两个式子几乎把x,y变到它们自身只产生一个微小的变化。因此经过多次运算也无出现溢出现象,这个模块是精心设计的,考

8、虑了sin和cos,arctan的相对比例。模块6是关于过程调用和参数寻址的。使用了一个带有三个参数的过程p3。p3过程如下:*x = *y;*y = *z;*x = t * (*x + *y);*y = t1 * (*x + *y);*z = (*x + *y)/t2;全局变量t和在别的模块时的值相同。当x,y取初值1,0时,每次计算结果x与y相同,而和原来的值非常接近。模块7是关于数组调用的,它用了一个无参数过程po,用来增加过程调用的比例。每次运行结果,e11和e1 3的值互换,po过程如下:e1j = e1k;e1k = e1l;e1l = e1j;模块8用一个赋值语句测试标准函数。算

9、式如下:x = sqrt(exp(log(x)/t1);当初值取为tl= 0.50025,x=0.75。重复执行这个语句可以得到一个稳定的x值的序列而不会出现溢出情况。在上述所有模块中,乘和除都经过精心选择以符合统计数据通过控制循环变量的相对值。可以改变整十程序中各类指令出现的频率。根据这一点,用最优化的方法,按照使整个程序中各类指令出现的频率尽可能接近某一特定的频率(这是依赖用户的要求的)的要求即可把n1,n2,······n8的相对值确定下来,下面给出的nk的相对值是根据Gibson混合得到的,也是通常所用的:n 1 n 2 n

10、3 n4 n5 n6 n7 n812 14 345 210 32 899 61 6 93特别地当n就取上述数值时,执行一次程序恰好相当于执行了1 0万条whetstone机器指令。可用whetstone基准程序对不同的机器、语言编译程序和精度进行测试,可以获取关于语言以及它们的实现的知识,此程序因模块简单,译成别的语言也非常容易,在不同的机器上执行上述合成基准程序,或在不同机器上执行不同语言的上述程序即可对不同的机器或对同机器上不同的编译系统进行性能比较。whetstone基准程序为后人编制合成基准程序提供了个很好的借鉴。3 whetstone的局限whetstone基准程序对科学计算型的应用

11、是个较好的模拟,为人们评价一个系统处理机能力提供了一个工具,在过去10年里得到广泛的应用但是它也有其局限性,讨论如 :1)它所依照的统计数据均为70年代收集的,不能代表当今的程序特点,有些语言特点如指针、记录等都未涉及到;2)浮点运算太多,即使对科学计算型的任务来说,它的搞浮点运算也太多了;3)程序中操作数的选取或者是任意的,或者是为了满足前述的设计准则,没有考察这些参数是否有代表性;4)对I/O系统和监督软件的调用无代表性;5)涉及到的存贮空间太小,目标码和涉及到的数据太小。目标文件太小,在有无cache的机器上会产生根大的差别。在运行时可能整个目标文件都装在cache中,这样得出的结果对比较的意义不大,数据太少,变元少,在有的机器中就可能全用快速寄存器保存中间变量,这样可大大节省时间,但结果也就不具有太大的典型性;6)模块太简单,使用的语言现象太少。4 测试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论