<backgound>
我真的需要优化C++代码.我正在为分子模拟编写一个库,我需要添加一个新功能.我过去曾尝试添加此功能,但之后我使用了嵌套循环中调用的虚函数.我对此感到不满,第一次实施证明这是一个坏主意.然而,这对于测试概念是可以的.
</ background>
现在我需要这个功能尽可能快(没有汇编代码或GPU计算,这仍然必须是C++,更可读而不是更少).现在我对模板和类策略有了更多了解(来自Alexandrescu的优秀书籍),我认为编译时代码生成可能是解决方案.
但是,在完成将其实现到库中的巨大工作之前,我需要测试设计.问题是测试这个新功能的效率的最佳方法.
显然我需要改进优化,因为没有这个g ++(以及可能还有其他编译器)会在目标代码中保留一些不必要的操作.我还需要大量使用基准测试中的新功能,因为1e-3秒的增量可以区分好的和坏的设计(在真实程序中这个功能将被称为百万倍).
问题是g ++在优化时有时"太聪明",如果考虑到从未使用计算结果,可以删除整个循环.我在查看输出汇编代码时已经看过了.
如果我向stdout添加一些打印,那么编译器将被强制在循环中进行计算,但我可能主要是对iostream实现进行基准测试.
那么如何对从库中提取的小特征进行正确的基准测试呢?相关问题:在小型装置上进行这种体外试验是正确的方法还是我需要整个背景?
谢谢你的建议!
似乎有几种策略,从特定于编译器的选项,允许微调到更通用的解决方案,应该适用于每个编译器,如volatile或extern.
我想我会尝试所有这些.非常感谢您的所有答案!