Ser*_* L. 7 c gcc atomic openmp icc
我决定将我的pthreaded代码转换为OpenMP.
之前我使用Intel/GCC原子内置(__sync_fetch_and_add系列)进行了大量的同步.
正如预期的那样,它们lock xadd在x64上与GCC和ICC一起编译.
但是当-fopenmp我在GCC上编译时,我开始在这些位置接听电话.callq ___sync_fetch_and_add_8和家人.ICC仍然生成适当优化的代码.
编辑:链接器拒绝链接该GCC代码:
$ gcc -O3 -Wall *.o -lpthread -ldl -lgomp
Undefined symbols for architecture x86_64:
"___sync_fetch_and_add_8"
Run Code Online (Sandbox Code Playgroud)
编辑2:这似乎是Apple的GCC特有的.我没有在Red Hat gcc 4.4.6上得到这种现象
如何让GCC生成相同的优化内联,而不是没有-fopenmp?
$ gcc -v
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~67/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~67/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
$ icc --version
icc (ICC) 12.0.2 20110112
Copyright (C) 1985-2011 Intel Corporation. All rights reserved.
Run Code Online (Sandbox Code Playgroud)
用.编译
icc -O3 -Wall -std=gnu99 -ipo -xSSE4.1 -axAVX -O3 -Wall -openmp
gcc -O3 -Wall -std=gnu99 -finline-functions -funroll-loops -O3 -Wall -fopenmp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |