Intel C++ (简体中文)
在开始之前
设置和安装
intel-parallel-studio-xeAUR[损坏的链接:package not found] 位于 AUR. 为了构建这个包,用户必须有一个许可文件,这个许可文件对个人和非商业用途免费。 这份许可文件可以通过电子邮件发送给用户 注册 并且应该在运行mkaepkg前复制到 $startdir 里. 当前的PKGBUILD需要7到8个包:
- intel-compiler-base - Intel C/C++ 编译器和基本库
- intel-fortran-compiler - Intel fortran 编译器和基本库 (仅 Parallel Studio XE)
- intel-openmp - Intel OpenMP 库
- intel-idb- Intel C/C++ 调试器
- intel-ipp - Intel 集成性能原件
- intel-mkl - Intel 数学核心库 (Intel® MKL)
- intel-sourcechecker - Intel 源代码检测器
- intel-tbb - Intel 线程构建模块 (TBB)
通过makepkg使用ICC
目前没有通过makepkg运行ICC的官方指南。本节的目的是收集用户使用的各种方法。如果您愿意提出您宝贵的建议,请将您的建议建立一个新的小节。
方法 1 (2012年12月08日)
修改/etc/makepkg.conf
中的CXXFLAGS以使makepkg使用ICC。 在现有的文件里添加以下代码。调用makepkg时不需要什么特殊的开关。
_CC=icc if [ $_CC = "icc" ]; then export CC="icc" export CXX="icpc" export CFLAGS="-march=native -O3 -no-prec-div -fno-alias -pipe" export CXXFLAGS="${CFLAGS}" export LDFLAGS="-Wl,-O1,--sort-common,--as-needed" export AR="xiar" export LD="xild" fi
测试你的软件是否真的是用ICC编译的:
- 输入命令 ldd [你的程序] | grep intel 如果这个程序连接到一个位于 /opt/intel/lib/中的共享库,那么它就是ICC编译的。
- 另一种方法是观察编译时的输出,看他是否使用了icc 或者 icpc 命令。
- 最后一种方法是看警告信息是不是icc风格的。
icc CFLAGS
In general, icc supports many of the same CFLAGS gcc supports and is also pretty tolerant to gcc flags it cannot use. In most cases it will happily ignore the flag warning the user and moving on. For an exhaustive list and explanation of available compiler flags, consult the icc manpage or better yet by invoking the compiler with the help flag:
icc --help
-xX
Use to generate specialized code to run exclusively on processors supporting it. If unsure which option to use, simply inspect the flags section of /proc/cpuinfo
. In the example below, SSE4.1 would be the correct selection:
$ cat /proc/cpuinfo | grep -m 1 flags flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
- -xHost
- -xSSE2
- -xSSE3
- -xSSSE3
- -xSSE4.1
- -xSSE4.2
- -xAVX
- -xCORE-AVX-I
- -xSSSE3_ATOM
-Ox
和gcc一样. x 是下列选上之一:
- 0 - 不进行优化
- 1 - 优化以使得执行速度变快,但是不进行那些增加代码但是提高速度有限的优化
- 2 - 缺省,优化以使得执行速度变快
- 3 - 优化以使得执行速度最快,除了O2的优化外,还包含一些比较激进的优化(不是对所有程序都会提高性能)
-w
与gcc类似:
- -w - 关闭所有警告 (推荐在编译包时使用)
- -Wbrief - print brief one-line diagnostics
- -Wall - 开启所有警告
- -Werror - 强制将警告视为错误
用Intel C / C++编译的软件
在下面的表格中我们发布了一个我们用Intel C/C++ 编译器尝试过编译的包列表 .应该可以用ABS取得源码。
Application | Compile | Comments |
---|---|---|
xz | OK | Works with the Method 1 |
zlib | OK | Works with the Method 1 |
GIMP 2.8 | OK | Works with the Method 1 |
Pacman 4.0.3 | OK | Works with the Method 1 |
x264 | OK | Works with the Method 1 |
MySQL | OK | Works with the Method 1 |
SQLite | OK | Works with the Method 1 |
LAME | OK | Works with the Method 1 |
xaos | OK | Works with the Method 1 |
VLC | Out of date | There is some problem with the compiler flags |
MPlayer | Out of date | It do not recognize the Intel compiler |
optipng | OK | Works with the Method 1. Comment out LD=xild in makepkg.conf |
python-numpy | OK | We must edit the PKGBUILD. python-numpy-mklAUR |
python-scipy | OK | We must edit the PKGBUILD. python-scipy-mklAUR |
Qt | OK | We must add the option -platform linux-icc-64 (or 32) in the configure command |
systemd | Fail | undefined reference to `server_dispatch_message' |
图例:
OK | 可以用icc编译并且工作 |
OK | 可以用icc编译并且工作,但是需要编辑PKGBUILD |
Unsuccessful | 可以编译,但有错误 |
Not recommended | 可以编译,但不推荐 |
Fail | 无法使用ICC编译这个包 |
Out of date | 用以前的CFLAGS不成功,你可以试试新的Method 1,别忘了把结果贴上来! |