gpt4 book ai didi

c++ - 为什么下面的程序用 g++ 编译时会慢 15%?

转载 作者:太空狗 更新时间:2023-10-29 19:55:49 25 4
gpt4 key购买 nike

更新: 为我的编译请求提供服务的编译框的实际分辨率不同。在较慢的实例中,我运行的是在 SuSE 9 上编译但在 SuSE 10 机器上运行的代码。这足以让我放弃它并将苹果与苹果进行比较。使用同一个编译框时,结果如下:

g++ 慢了大约百分之二

delta 真实 4 分钟增量用户 4 分钟增量系统5秒

谢谢!

gcc v4.3 与 g++ v4.3 简化为最简单的情况,只使用简单的标志

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
int i=0;
int j=0;
int k=0;
int m=0;
int n=0;
for (i=0;i<1000;i++)
for (j=0;j<6000;j++)
for (k=0;k<12000;k++)
{
m = i+j+k;
n=(m+1+1);
}
return 0;
}

这是一个已知问题吗? 15% 是非常有代表性的。并且对于实际时间、系统时间和用户时间都是全面的。我必须等到明天才能发布集会。

更新:我只在我的一个编译箱上试过。我正在使用 SuSE 10。

最佳答案

当使用 gcc 和 g++ 编译时,我看到的唯一区别是前 4 行。

海湾合作委员会:

    .file   "loops.c"
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main

g++:

    .file   "loops.c"
.def ___main; .scl 2; .type 32; .endef
.text
.align 2
.globl _main

如您所见,唯一的区别是对于 g++,对齐 (2) 出现在字边界上。这种微小的差异似乎会产生显着的性能差异。

这是一个解释结构对齐的页面,尽管它适用于 ARM/NetWinder,但它仍然适用,因为它讨论了对齐如何在现代 CPU 上工作。您需要专门阅读第 7 节“字对齐的缺点是什么?” :

http://netwinder.osuosl.org/users/b/brianbr/public_html/alignment.html

这里是关于 .align 操作的引用:

http://www.nersc.gov/vendor_docs/ibm/asm/align.htm

要求的基准:

海湾合作委员会:

john@awesome:~$ time ./loopsC

real 0m21.212s
user 0m20.957s
sys 0m0.004s

g++:

john@awesome:~$ time ./loopsGPP

real 0m22.111s
user 0m21.817s
sys 0m0.000s

我将最内层的迭代次数减少到 1200。结果并不像我希望的那样广泛,但汇编输出再次在 Windows 上生成,并且在 Linux 中完成计时。也许在 MinGW 的幕后做了一些不同的事情,而不是在 Linux 对齐方面使用 gcc。

关于c++ - 为什么下面的程序用 g++ 编译时会慢 15%?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com