c – ()循环基准测试对于任何循环绑定都需要相同的时间
作者:互联网
我愿意编写一个代码,让我的CPU执行一些操作,看看他花了多少时间来解决它们.我想做一个从i = 0到i <5000的循环,然后将i乘以一个常数和时间.我最终得到了这个代码,它没有错误,但即使我改变循环i< 49058349083或者如果i< 2它花费相同的时间,它只需要0.024秒来执行代码.是什么错误? PD:我昨天开始学习C,对不起,如果这是一个非常容易回答的问题,但我找不到解决方案
#include <iostream>
#include <ctime>
using namespace std;
int main () {
int start_s=clock();
int i;
for(i=0;i<5000;i++){
i*434243;
}
int stop_s=clock();
cout << "time: "<< (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000;
return 0;
}
解决方法:
因为for循环的主体:
i*434243;
什么都不做,所以假设您正在编译启用了优化标志的代码,编译器会将其擦掉.
将其更改为:
int a = i*434243;
可能会在-O0以外的任何其他方面进行优化,所以我不建议.
此外,这将导致未定义的行为,因为溢出,因为您使用的常量值相对较大,因为我继续增加.
我建议你这样做:
int a = i * i;
cout << a << "\n";
标签:microbenchmark,c,performance,benchmarking 来源: https://codeday.me/bug/20190910/1800790.html