更新:为我的编译请求提供服务的编译框的实际解析结果不同.在较慢的实例中,我运行的是在SuSE 9上编译但在SuSE 10上运行的代码.这对我来说是足够的差异,并将苹果与苹果进行比较.使用相同的编译框时,结果如下:
g ++慢了约2%
三角洲实际4分钟三角洲用户4分三角洲系统5秒
谢谢!
gcc v4.3 vs 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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个已知的问题?15%非常重要.并且全面了解真实,系统和用户时间.我必须等到明天发布会.
更新:我只试过我的一个编译框.我正在使用SuSE 10.
使用gcc和g ++编译时,我看到的唯一区别是在前4行内.
GCC:
.file "loops.c"
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main
Run Code Online (Sandbox Code Playgroud)
克++:
.file "loops.c"
.def ___main; .scl 2; .type 32; .endef
.text
.align 2
.globl _main
Run Code Online (Sandbox Code Playgroud)
你可以看到唯一的区别是,使用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
要求的基准:
GCC:
john@awesome:~$ time ./loopsC
real 0m21.212s
user 0m20.957s
sys 0m0.004s
Run Code Online (Sandbox Code Playgroud)
克++:
john@awesome:~$ time ./loopsGPP
real 0m22.111s
user 0m21.817s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
我将最内部的迭代次数减少到1200次.结果并不像我希望的那样广泛,但是再次在Windows上生成程序集输出,并在Linux中完成计时.也许在MinGW的幕后做的事情与用于Linux对齐的gcc不同.
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |