代码里用到了一个【RUN--ENDRUN】宏,不要奇怪没见过,是我自己写的。
代码: 全选
#include"../include/run.h"
void main(void){
float b,b1,b2,b3,b4;
int c,c1,c2,c3,c4;
//RUN和ENDRUN之间的代码会重复执行100000000*9次,每执行一亿次,记录下执行时间,重复9次,取均值
RUN(100000000,9)//【RUN--ENDRUN】是测试性能的宏,后面贴了源码
/**b=(float)(exec_count);
b1=(float)(exec_count);
b2=(float)(exec_count);
b3=(float)(exec_count);
b4=(float)(exec_count);*/
c=exec_count;
c1=exec_count;
c2=exec_count;
c3=exec_count;
c4=exec_count;
ENDRUN
}
./t运行,输出:
332 325 326 326 326 326 325 326 327
average:326
以上是没有类型转换的性能评价,再把注释部分对调,看类型转换的情况下,输出:
723 710 712 711 709 712 713 710 711
average:712
---------------------------------------------
测试环境ubuntu12.1,gcc4.7,联想y470
---------------------------------------------
之所以做这样的测试,是在读《3D游戏编程大师》时候,看到作者说“这样....可以避免浮点数和整数之间的转换,因为作者不信任编译器"。
在下是新手,请大侠们说说上面的性能差距意味着什么,可以忽略吗?当然也欢迎指出测试代码的不严谨处,因为我对cache,编译优化之类不太懂。
附:run.h
代码: 全选
#ifndef RUN_H
#define RUN_H
#include<sys/time.h>
#include<stdio.h>
struct timeval start,end;//global vars,remember not to use repeatly
int var_run_num,run_count,exec_count,timeCost,timeCost_total;//look up
#define RUN(exec_num,run_num)\
timeCost_total=0;\
var_run_num=run_num;\
printf("run start-----------\nexec_strength:%d\n",exec_num);\
for(run_count=0;run_count<run_num;run_count++){\
gettimeofday(&start,NULL);\
for(exec_count=0;exec_count<exec_num;exec_count++){
#define ENDRUN\
}\
gettimeofday(&end,NULL);\
timeCost=(end.tv_sec-start.tv_sec)*1000+(end.tv_usec-start.tv_usec)/1000;\
timeCost_total+=timeCost;\
printf("%d ",timeCost);\
}\
printf("\naverage:%d\nrun exit-------------\n",timeCost_total/var_run_num);
#endif