g++关闭常量传播以进行基准测试
g++ turn off constant propagation for benchmarking?
我想在c++中运行一个简单的函数基准测试,其中有几个函数调用使用硬编码输入。
inline Output simple_func_to_test(const Input input);
int main(int argc, char* argv[]) {
// The value of input is known at compile time.
const Input input;
// The value of output can be deduced at compile time.
Output output = simple_func_to_test(input);
}
我对汇编没有详细的了解,但是从检查使用g++ 4.8与Ofast生成的汇编来看,编译器似乎正在优化函数并在编译时评估输出值。例如,涉及乘法的c++函数生成不执行乘法的程序集。
在上面的示例中,我希望在编译时打开所有优化,除了input的值应该被视为在编译时未知。
我如何改变c++或传递一个标志到c++来做到这一点?
在gcc优化标志页面上有大量与常量传播相关的标志。这一切的微妙之处和确切意义我都搞不懂。
编辑:我没有兴趣完全关闭恒定传播。我只是希望输入被视为在编译时不知道。
我想模拟在编译时输入未知的情况。我不想干扰编译器
使系统不确定变量值的最简单方法是声明它为volatile
:
const volatile Input input;
它的值将在函数调用之前从内存中重新读取。函数内部不会受到干扰,使其成为完全真实的模拟。
相关文章:
- 使用rdtsc进行基准测试的缺点是什么
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 更高效地在微控制器上对C++进行基准测试
- _mm256_load_ps调试模式下导致谷歌/基准测试的分段错误
- 二叉树基准测试结果
- 如何使用谷歌基准测试对自定义界面进行基准测试
- 谷歌基准测试,如何只调用一次代码?
- 使用 std::chrono::steady_clock 对线程/异步中的代码进行基准测试
- 谷歌基准测试结果中显示的时间没有意义
- 使用 Google 基准测试时返回值会发生什么情况?
- 如何在Qt测试框架中对信号进行基准测试?
- C/C++memcpu基准测试:测量CPU和墙时间
- 如何将参数传递给Google基准测试程序
- 如何对CUDA项目进行基准测试
- 为什么这个简单的 C++ SIMD 基准测试在使用 SIMD 指令时运行速度较慢?
- 多部分基准测试的权重是多少?
- 简单的 for() 循环基准测试在任何循环绑定下花费相同的时间
- 禁用优化后,quick-bench.com 基准测试要快得多
- Winsock本地客户服务器基准测试
- g++关闭常量传播以进行基准测试