我正在用 C + + 做一些性能关键的工作,我们目前正在使用整数计算的问题,本质上是浮点数,因为“它更快”。这导致了很多恼人的问题,并且增加了很多恼人的代码。
现在,我记得读过关于浮点计算如何如此缓慢大约386天,我相信(IIRC)有一个可选的协处理器。但是可以肯定的是,当今的 CPU 复杂度和功能都呈指数级增长,如果进行浮点运算或整数运算,它在“速度”上没有什么不同?特别是因为实际的计算时间与导致管道停止或从主存中提取某些内容相比是很小的?
我知道正确的答案是对目标硬件进行基准测试,测试的好方法是什么?我编写了两个小小的 C + + 程序,并将它们的运行时间与 Linux 上的“ time”进行了比较,但实际的运行时间变化太大(对我在虚拟服务器上运行没有帮助)。除了花一整天的时间来做数百个基准测试,制作图表等等,我还能做些什么来合理测试相对速度呢?有什么想法吗?我完全错了吗?
The programs I used as follows, they are not identical by any means:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
int accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += rand( ) % 365;
}
std::cout << accum << std::endl;
return 0;
}
程序2:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
float accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += (float)( rand( ) % 365 );
}
std::cout << accum << std::endl;
return 0;
}
先谢谢你!
编辑: 我关心的平台是在桌面 Linux 和 Windows 机器上运行的常规 x86或 x86-64。
编辑2(粘贴从下面的注释) : 我们有一个广泛的代码库目前。实际上,我遇到过这样的一般性问题,即我们“一定不要使用 float,因为整数计算更快”——我正在寻找一种方法(如果这是真的)来证明这种一般性假设是错误的。我意识到,如果不做所有的工作并在事后对其进行分析,就不可能为我们预测确切的结果。
无论如何,感谢你所有出色的回答和帮助。请随意添加其他内容:)。