0

我正在尝试测量使用 rdtsc 执行函数“check()”需要多长时间,如下所示:

a = rdtsc();
check(pw);
b = rdtsc();

return (b-a);

但是,我收到的时间差异非常小,我认为这是由于我的编译器(在 Windows 上使用 G++)优化了代码。由于'check()' 不会影响程序的任何其他部分,我认为编译器完全忽略了这个调用。

我读过关于使用称为 asm volatile 的东西来告诉编译器不要优化代码的某个部分,但我不知道如何实现它。

对此有什么帮助吗?

4

2 回答 2

2

大概该函数计算并返回一些值。用那个值做一些事情,比如把它添加到一个全局变量中(并最终打印出那个变量),这样编译器就不能轻易地优化这个函数了。

于 2017-06-06T17:14:12.607 回答
0

1)您需要运行数亿次迭代才能获得平均水平。表现

2)不要对这些低级的东西进行基准测试,因为它几乎与现实世界无关。真正的任务工作数十亿 CPU 循环和单个 volatile 只会增加 0.000001% 的开销......或者可能会增加 100000%,如果您的线程不断访问共享数据。您可以对您的算法的一部分进行基准测试,然后对其进行改进,但不是特定的说明。

于 2017-06-06T18:12:22.540 回答