使用g ++ 4.7,Lambda更慢 - 使用g ++ 4.6更快

时间:2012-10-25 12:31:48

标签: lambda g++ performance-testing

我使用的是g ++ 4.7,因为它是g ++的最新版本之一,它是第一个为c++11添加真正支持的版本。

出于测试目的,我正在考虑代码from here

You can find the complete source code here.

我将此源命名为lambda.cpp,并使用以下命令编译它:

g++-4.6 -std=c++0x lambda.cpp -o lambda46

g++-4.7 -std=c++11 lambda.cpp -o lambda47

lambda47可执行文件在lambda性能方面比lambda46慢约半秒,令人惊讶的是迭代器部分通常比lambda46快。

我也尝试过使用

g++-4.7 -std=c++0x lambda.cpp -o lambda47-0x

但基本上g ++ - 4.6总是生成比g ++ - 4.7更快的代码。

这是一种常见行为还是一个错误?

有一个编译器可以在C ++ 11中表现更好吗?


g ++ - 4.7已用

编译
  

配置为:../ src / configure -v --with-pkgversion ='Ubuntu / Linaro   4.7.2-4precise1'--with-bugurl = file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages = c,c ++,go,fortran,objc,obj-c ++ - -prefix = / usr --program-suffix = -4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir = / usr / lib --without-included-gettext - -enable-threads = posix --with-gxx-include-dir = / usr / include / c ++ / 4.7 --libdir = / usr / lib --enable-nls --with-sysroot = / --enable-clocale = gnu --enable-libstdcxx-debug --enable-libstdcxx-time = yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32 = i686 --with-tune = generic --enable-checking = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu

g ++ - 4.6 with

  

配置为:../ src / configure -v --with-pkgversion ='Ubuntu / Linaro   4.6.3-1ubuntu5' - with-bugurl = file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages = c,c ++,fortran,objc,obj-c ++ --prefix = / usr --program-suffix = -4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir = / usr / lib --without-included-gettext --enable -threads = posix --with-gxx-include-dir = / usr / include / c ++ / 4.6 --libdir = / usr / lib --enable-nls --with-sysroot = / --enable-clocale = gnu - -enable-libstdcxx-debug --enable-libstdcxx-time = yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32 = i686 --with-tune = generic --enable-checking = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu

1 个答案:

答案 0 :(得分:1)

就我而言,使用g ++ 4.6和4.7(和g ++ 4.7生成比4.6更快的代码)的lambda版本更快。与您的唯一区别是我使用的是32位版本的编译器。

但是如果我用-O3编译你的代码,迭代器会更快约2秒。