gpt4 book ai didi

C++ 如何对非常快的操作进行基准测试

转载 作者:太空狗 更新时间:2023-10-29 23:23:14 24 4
gpt4 key购买 nike

我使用的是 VC++2013、Windows 7-64、Intel i7 3.6 GHz。我想测量非常快的数学运算的执行时间,例如我想比较标准 fabsf() 的性能使用替代的“更快”方法或标准 tanh() 函数与 Pade 近似等。

问题是这些操作太快了,即使我运行它们无数次,我在基准测试结束和开始之间的时间总是 0 毫秒。

我尝试使用 <chrono> 获取以纳秒为单位的时间但它四舍五入到十分之一毫秒,而不是真正的纳秒,所以我在基准测试中仍然得到 0 个经过的纳秒。

能否请您提供一段我可以用来运行基准测试的代码?

这是我的:

#include <vector>
#include <chrono>
#include <ctime>
using namespace std;

// 1/RAND_MAX
#define RAND_MAX_RECIP 0.00003051757f

int _tmain(int argc, _TCHAR* argv[])
{
srand (static_cast <unsigned> (time(0)));

// Fill a buffer with random float numbers
vector<float> buffer;
for (unsigned long i=0; i<10000000; ++i)
buffer.push_back( (float)rand() * RAND_MAX_RECIP );

// Get start time
auto start = std::chrono::high_resolution_clock::now();

for (unsigned long i=0; i<buffer.size(); ++i)
{
// do something with the float numbers in the buffer
}

// Get elapsed time
auto finish = std::chrono::high_resolution_clock::now();

printf("Executed in %d ns\n\n", std::chrono::duration_cast<std::chrono::nanoseconds>(finish-start).count());

return 0;
}

最佳答案

我认为最有可能的问题是编译器注意到您没有使用计算结果并优化了计算。您只需要说服编译器不要那样做。

我建议只保留所有计算结果的运行总和,并在打印循环所用时间后将其打印出来。您将忽略最后的总和,但编译器不会知道。

关于C++ 如何对非常快的操作进行基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com