怎么测计算机的峰值浮点运算速率,即MFLOPS

cuizehan 2009-10-04 10:48:56
首先有一个疑问
我用软件sisoftware测出的峰值速率是20.22GFLOPS,我的cpu是intel P8700,2.53GHz
我不明白的是,cpu的每秒钟震荡2.53G次,怎么可能每秒钟进行20.22G次浮点运算
但去网上搜了下,计算机的峰值速率确实是这个量级的

自己写了个程序
主体部分是这样的

__asm
{
CPUID
RDTSC
mov cycle3_l_b,eax
mov cycle3_h_b,edx
}

for(i=0;i<count;i++)
{
1000次c=d*f;
}

__asm
{
CPUID
RDTSC
mov cycle3_l_e,eax
mov cycle3_h_e,edx
}

cycle3_b=(double)cycle3_h_b*4294967296+(double)cycle3_l_b;
cycle3_e=(double)cycle3_h_e*4294967296+(double)cycle3_l_e;
cycle3=cycle3_e-cycle3_b;

另外,cycle1是for循环里面为空语句时的执行时间,用cycle3减去cycle1就得到了1000*count次浮点乘法的时钟周期数,进而就可以得到一条浮点乘法所需的时钟周期数,进而求出GFLOPS
之所以循环内运行1000次,是为了想发挥流水线的作用,不知道这样考虑有没有意义

但此处有两个问题:
1。程序运行多次的结果相差很多,有时候一条乘法需要是周期为3,有时候为2,有时候为4,一直找不到原因
2。通过查看程序的汇编代码,发现一条乘法的c指令,对应了三条汇编的浮点指令,这样测出的浮点速率是不是应该再乘以三
...全文
1361 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuizehan 2009-10-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]
把循环次数调大,1000次浮点……太少了吧,虽然对汇编语言没研究,但是咱们测C程序速度的时候哪次不是几十万乃至上千万次循环,再试试误差大不大
[/Quote]

1000次是循环内的运算次数,
总循环次数为100M次
jackyjkchen 2009-10-06
  • 打赏
  • 举报
回复
把循环次数调大,1000次浮点……太少了吧,虽然对汇编语言没研究,但是咱们测C程序速度的时候哪次不是几十万乃至上千万次循环,再试试误差大不大
cuizehan 2009-10-06
  • 打赏
  • 举报
回复
没人知道吗?

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧