我有两个用C++编写的算法.据我所知,通常使用
-O0 -NDEBUG(g ++)进行编译,同时比较两种算法的性能(无症状地相同).但我认为优化级别对其中一个是不公平的,因为它在每种情况下都使用STL.使用普通数组的程序在使用-O0选项编译时,速度比STL重算法快5倍.但是当我使用-O2 -NDEBUG编译它们时,性能差异并没有太大的不同.
有没有办法在优化级别-O0中充分利用STL(我在vector []运算符中获得了很高的性能)?
在比较两种算法时,您使用了哪些优化级别(以及可能的变量,如-NDEBUG)?
如果有人能够对比较C++编写的算法性能的学术研究趋势有所了解,那将会很有帮助吗?
好的,为了隔离优化级别的问题,我现在使用一种算法但两种不同的实现.
我用原始指针(int和boolean)将其中一个函数改为std :: vector和std :: vector ...使用-O0 -NDEBUG,性能为5.46s(原始指针)和11.1s(std :: vector) ).使用-O2 -NDEBUG,性能为2.02s(原始指针)和2.21s(std :: vector).相同的算法,一个实现使用int和boolean的4/5动态数组.另一个是使用std :: vector和std :: vector代替.在其他所有情况下都是一样的
你可以看到-O0 std :: vector的性能比指针速度快了两倍.在-O2中,它们几乎相同.
但我真的很困惑,因为在学术领域,当他们在运行时发布算法结果时,他们用-O0编译程序.
我缺少一些编译器选项吗?
两个开发人员如何在相同的C++代码库上工作,以便他们可以透明地工作?C++代码是否有任何常见的缩进样式,一旦建立,两个开发人员可以生成具有相同缩进级别的代码.
我发现Emacs对于缩进非常具有侵略性,它试图逼迫它,而Vi非常宽容.但是emacs样式(混合标签和空格)对Vim来说并不是那么友好.