intelicc編譯器下載
A. 怎樣在vs2013中使用icc英特爾編譯器
自帶編譯器,編譯C/C++的cl.exe,編譯C#的csc.exe。
在VS的安裝目錄下找到一個vscvarsall.bat(我的在D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC下),把它拖進命令提示符中,回車運行後就能單獨使用編譯器。
PS:
C/C++編譯:cl 源文件.c/cpp
C#編譯:csc 源文件.cs
1. 「cl不是可用的內部命令或可執行程序」
----原因:環境變數Path沒有設置好。
----解決:在環境變數Path中添加VC的bin目錄。Path= D:\Microsoft Visual Studio 9.0\VC\bin。在D:\Microsoft Visual Studio 9.0\VC\ce\bin下還有其他一些編譯器,看名字是交叉編譯用的
2.「mspdb80.dll無法找到」
----原因:vs2008的VC\bin目錄下缺少msobj80.dll、mspdb80.dll、mspdbcore.dll、mspdbsrv.exe這四個文件。
----解決:在D:\Microsoft Visual Studio 9.0\Common7\IDE下復制這四個文件到VC\bin。
3.解決以上問題以後,可以直接在命令行的任何目錄下編譯C/C++文件了。可是又出現新狀況:
「fatal error: cannot open include file」
----原因:vs2008未設置include和lib的環境變數。
----解決:
3.1在環境變數里添加變數INCLUDE,包含進VC\Include和C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include(這個是安裝vs時自動安裝在C盤的)兩個目錄
INCLUDE=D:\Microsoft Visual Studio 9.0\VC\include; C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
3.2添加變數LIB,包含進VC\lib和C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib(這個也是安裝vs時自動安裝在C盤的)兩個目錄:
LIB=D:\Microsoft Visual Studio 9.0\VC\lib; C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
4.提示:fatal error LNK1104: 無法打開文件「kernel32.lib」,(在IDE裡面運行沒有問題,因為IDE中採用了另外的封裝了庫)
----原因:vs2008未設置include和lib的環境變數。
----解決:在環境變數里添加變數LIB,C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
或者將kernel32.lib直接到vc的lib目錄下也可以
B. 如何在命令行中使用intel c++編譯器,並使用openmp和mkl來編譯自己的程序,並運算
1、icc
Intel C/C++編譯器接受遵守ANSI C/C++ , ISO C/C++ standards,GNU inline ASM for IA-32 architecture標準的輸入。與linux下常用的gcc兼容並支持更大的C語言擴展,包括源文件、命令行參數、目標文件。不支持gcc的inline方式的匯編。例,f.c
#include<stdio.h>
int main(int argc, char* argv[]){
printf("Hello\n");
return 0;
}
編譯:icc -c f.cpp -o f.o
鏈接:icc f.o -o f
運行:./f
注意,編譯與鏈接都由icc來完成,icc常用命令行參數:
-o 輸出文件命名
-I include路徑
-L lib路徑
-l 包含的lib名
-c 僅生成目標文件(*.o),不鏈接
-On n=0,1,2,3 編譯器優化選項,n=0關閉編譯器優化,n=3使用最激進的優化
-c99[-] 打開/關閉 c99規范的支持
詳細的請參照icc的manpage.
2、ifort
Intel Fortran編譯器支持F77/90/95標准並與CFV(Compaq Visual Fortran)兼容。例,f.f90
program f
print *, "Hello"
stop
end
編譯:ifort -c f.f90 -o f.o
鏈接:ifort f.o -o f
運行:./f
編譯與連接同樣由ifort來完成,ifort常用命令行參數:
-o 輸出文件命名
-I include路徑
-L lib路徑
-l 包含的lib名
-c 僅生成目標文件(*.o),不鏈接
-On n=0,1,2,3 編譯器優化選項,n=0關閉編譯器優化,n=3使用最激進的優化
-std90 使用F90標准編譯
-std95 使用F 95標准編譯
-f77rtl 編譯使用F77運行方式的代碼(用於解決特殊問題)
These options optimize application performance for a particular Intel? processor or family of processors. The compiler generates code that takes advantage of features of the specified processor.
Option
Description
tpp5 or G5 Optimizes for Intel? Pentium? and Pentium? with MMX? technology processors.
tpp6 or G6 Optimizes for Intel? Pentium? Pro, Pentium? II and Pentium? III processors.
tpp7 or G7 Optimizes for Intel? Pentium? 4, Intel? Xeon?, Intel? Pentium? M processors, and Intel? Pentium? 4 processors with Streaming SIMD Extensions 3 (SSE3) instruction support.
On Intel? EM64T systems, only option tpp7 (Linux) or G7 (Windows) is valid.
About tpp:
http://www.ncsa.illinois.e/UserInfo/Resources/Software/Intel/Compilers/9.0/main_for/mergedProjects/copts_for/common_options/option_tpp567_g567.htm
https://wiki.ke.e/display/SCSC/Compilers+and+Libraries
Intel Fortran Compiler Options: http://geco.mines.e/guide/ifort.html
Intel(R) Fortran Compiler Options: http://www.rcac.pure.e/userinfo/resources/common/compile/compilers/intel/man/ifort.txt
ifort編譯器提供了非常多的優化參數
$ ifort --help | more 查看就可以
也可以定位到某個參數
$ifort --help | grep -5 '-mkl'
-5表示顯示查找到的行及下面5行的內容。
3、Intel MKL數學庫針對Intel系列處理器進行了專門的優化,主要包含的庫有:
基本線形代數運算(BLAS)
向量與向量、向量與矩陣、矩陣與矩陣的運算
稀疏線形代數運算
快速傅立葉變換(單精度/雙精度)
LAPACK(求解線形方程組、最小方差、特徵值、Sylvester方程等)
向量數學庫(VML)
向量統計學庫(VSL)
高級離散傅立葉變換
編譯:
icc multi.c -I/opt/intel/mkl/include –L/intel/mkl/lib –lmpi_ipf –o multi
4、MPI程序編譯
消息傳遞介面(MPI)並行程序設計模型程序的編譯命令。例,f.c
include<stdio.h>
#include<mpi.h>
main(argc,argv)
int argc;
char *argv[];
{
char name[BUFSIZ];
int length;
MPI_Init(&argc,&argv);
MPI_Get_processor_name(name, &length);
printf("%s: hello world\n", name);
MPI_Finalize();
}
編譯與連接均使用mpicc,參數與mpicc中定義的編譯器相同,這里與icc相同。
mpicc –c hello.c –o hello.o
mpicc hello.o –o hello
運行使用mpirun 命令,將運行需要的節點定義在文件中並在-machinfile中制定。
文件: nodelist
node1
node1
node2
node3
運行:
$mpirun –machefile nodelist –np 4 ./hello
node1: hello world
node1: hello world
node2: hello world
node3: hello world
5、32位向64位的移植
32位程序到64位移植中應注意的常見問題:
數據截斷:
由於long類型變數的運算(賦值、比較、移位等)產生。long定義在x86上為32bits,而在ia64上為64bits.容易在與int型變數運算時出現異常。
處理方法:盡量避免不同類型變數間的運算,避免將長度較長的變數賦值到較短的變數中,統一變數長度可以解決這個問題。簡單的對於32位轉移到64位可以將所有long定義轉換為int定義。
C. 編譯器是由誰來長期維護和組織以及更新的
有CPU的製造商(例如 Intel 有 icc),也有其他的開源組織(例如 GNU 的gcc),或者其他的公司(例如 Microsoft 的 MSVC)。
如果有國際標准或者事實標準的話,編譯器一般會對這些標准給點面子 —— 當然 Intel 之類的本身就有制定標准讓別人認可的能力。
CPU的製造商會提供這種CPU使用的指令集,以及其他一些關於CPU的架構的信息。例如網上可以找到 Intel 的 manual 。依照這些就可以寫出具有特定功能的二進制指令。
上面說的 icc、gcc、MSVC可以從各自的網站下載,此外一些操作系統會自帶編譯器(例如 Linux 系統通常會自帶 gcc )
D. 如何安裝icc編譯器
執行sudo apt-get install libstdc++5時,可能出現「無法找到軟體包libstdc++5」,自己在網上搜索下載這個文件,得到一個compat-libstdc++-33_3.2.3-48.3_i386.deb安裝包,然cd 到deb包所在的位置,執行