前言
除了桌面系統預設的 C 或 C++ 編譯器外,也有一些針對特定硬體而設計的 C 或 C++ 編譯器,像是 Intel C++ Compiler、CUDA C、Arduino C 等。比起通用型 C 或 C++ 編譯器,針對特定硬體的 C 或 C++ 編譯器會針對特定硬體去優化,可以享受特定硬體所帶來的益處。
Intel C++ Compiler 是針對 Intel 平台而設計的 C 或 C++ 編譯器。由於 Intel 平台相當普遍,所以這個編譯器值得注意。
Intel C++ Compiler 的系統需求
Intel C++ Compiler 的目標硬體為基於 Intel 處理器的個人電腦。雖然使用其他 Intel 相容處理器 (AMD、VIA 等) 的個人電腦也可以裝 Intel C++ Compiler,但在非 Intel 平台上會吃不到 Intel C++ Compiler 的優化,故不建議使用。
支援的系統會區分為宿主系統 (host system) 和目標系統 (target system) 兩種。宿主系統是安裝 Intel C++ Compiler 時所用的系統,而目標系統是編譯出來的執行檔可用的系統。當兩者相同時,就是一般的編譯,而兩者相異時為交叉編譯。
以下是 Intel C++ Compiler 所支援的宿主系統:
- Windows
- GNU/Linux
- macOS
基本上就是主流的桌面系統。在 Windows 上可搭配 Visual Studio 2017 或 2019 來使用。
以下是 Intel C++ Compiler 所支援的目標系統:
- Windows
- GNU/Linux
- Android
要注意目標系統沒有 macOS。
取得 Intel C++ Compiler
Intel C++ Compiler 會隨附在 Intel Parallel Studio 或 Intel System Studio 中。兩者皆是商業軟體,但後者可長期免費使用。Intel System Studio 的使用許可需每年更新一次,目前可無限更新使用許可,但不知道 Intel 日後會不會回收這項褔利。
如果只是要用 Intel C++ Compiler 的話,先用免費的 Intel System Studio 即可。確認 Intel System Studio 無法滿足自己的需求後,再買 Intel Parallel Studio 也不遲。
安裝 Intel System Studio
本筆展示安裝 Intel System Studio 的過程。
註:筆者的 Windows 主機因顯卡老舊,畫面有殘影,故改用 GNU/Linux 虛擬主機做截圖。
到 Intel C++ Compiler 的專頁下載 Intel C++ Compiler:
可以在 Intel Parallel Studio 和 Intel System Studio 中擇一。我們的目的只是要用 C 編譯器,故下載 Intel System Studio 即可:
這裡只是簡單的說明頁。繼續按下一步即可:
這裡特別說到 Intel System Studio 可以免費使用,只要每年更新使用許可就可以繼續使用。按下一步開始選擇所要安裝的軟體:
在安裝 Intel System Studio 時,不是一口氣就安裝所有的軟體,而是像點菜般選擇自己所需的部分:
我們只選擇了 Intel C++ Compiler、Intel Inspector、GDB:
讀者不一定要和我們選一樣的軟體,可以隨自己需求更動軟體清單。
註冊不是強制的,所以我們不註冊,直接下載軟體:
根據自己的宿主系統和目標系統來選擇即可:
由於筆者是在 GNU/Linux 上展示安裝過程,故下載到 tarball。若是在 Windows 上,則會下載到安裝程式:
接著,啟動安裝程式。一開始先選擇安裝位置:
在 GNU/Linux 安裝 Intel System Studio 時,預設會安裝到 $HOME/intel 上。
按照慣例,會有落落長的軟體授權文件。有興趣的讀者可以自己看一下:
Intel System Studio 會收集一些匿名資料,讀者可自行決定要不要提供這些資料:
筆者在測試時,是使用 openSUSE Leap 15.1。這並非 Intel System Studio 官方認定的系統。實際上仍然可以使用:
安裝精靈會展示出安裝的軟體:
安裝完後即可結束安裝精靈。
我們實際上會從命令列使用 Intel C++ Compiler,至於 IDE 則不是必備的。
在命令列使用 Intel C++ Compiler 編譯 C 或 C++ 程式
Intel C++ Compiler 在使用前要先初始化環境,這點很像 Visual C++。在 Windows 上,初始化的 Batch 命令稿為 compilervars.bat 。以筆者的電腦為例,完整的指令如下:
C:\> "C:\Program Files (x86)\IntelSWTools\sw_dev_tools\compilers_and_libraries\windows\bin\compilervars.bat" intel64
由於讀者所安裝的軟體可能相異,請不要死背這條指令,自己試著在系統上找一下 compilervars.bat 的位置。
在 Unix 系統上,初始化的 shell 命令稿為 compilervars.sh 或 compilarvars.csh ,視 shell 環境而定。以筆者的電腦為例,完整的指令如下:
$ . $HOME/intel/sw_dev_tools/bin/compilervars.sh intel64
同樣地,請不要死背指令。
初始化環境後,就可以在命令列環境使用 Intel C++ Compiler。
這個編譯器比較特別,在 Windows 上的指令為 icl
,但在 Unix 上的指令為 icc
。此外,在 Windows 上使用 DOS 風格的參數,且參數相容於 Visual C++;但在 Unix 上使用 GNU 風格的參數,參數相容於 GCC。Intel C++ Compiler 會故意設計成這樣,是為了讓不同平台的使用者較快轉移編譯器。
註:Visual C++ 的命令列程式為 cl.exe,而 Windows 版本的 Intel C++ Compiler 的命令列程式為 icl.exe。
例如,在 Unix 上將 CC
參數設為 icc
,就可以用 Intel C++ Compiler 取代 GCC:
$ make CC=icc
當然, Makefile 要預先寫好。本文重點不在於寫 Makefile ,故不詳細說明。
在命令列使用 Intel Inspector 檢查 C 或 C++ 程式
除了使用 Intel C++ Compiler 編譯 C 或 C++ 之外,還可以用 Intel Inspector 檢查 C 或 C++ 程式。這套軟體可以用來偵測記憶體或執行緒問題。
使用 Intel Inspector 前也是要初始化環境。在 Windows 上,用來初始化的 Batch 命令稿為 inspxe-vars.bat 。以下是筆者在電腦上執行的指令:
C:\> "C:\Program Files (x86)\IntelSWTools\sw_dev_tools\Inspector\inspxe-vars.bat"
Unix 的初始化命令稿為 inspxe-vars.sh 或 inspxe-vars.csh ,視 shell 環境而定。以下是筆者在 Unix 系統上執行的指令:
$ . $HOME/intel/sw_dev_tools/inspector/inspxe-vars.sh
初始化環境後,就可以在命令列使用 Intel Inspector。
Intel Inspector 使用時要分兩步驟操作。第一步先從目標程式收集資料,第二步會根據收到的資料產生報告。
假定我們的目標程式為 program
。以下指令會偵測是否有記憶體洩露:
$ inspxe-cl -collect mi1 -- ./program
inspxe-cl
可指定 -collect
或 -report
兩種動作 (action) 之一,但不能同時指定。-collect
可收集的對象有六種,其中三種和記憶體相關,三種和執行緒相關。
在命令列程式中,--
代表主指令的參數到此為止,之後的參數會傳到目標指令上。假定指令如下:
$ inspxe-cl -collect mi1 -- ./program --opt var path/to/file
這時後,主指令為 inspxe-cl -collect mi1
,目標指令為 ./program --opt var path/to/file
,兩者間以 --
相隔。
執行完程式後,Intel Inspector 會將收集的資料放在資料夾中,像是 r000mi1 。該資料夾內有很多文字檔案,這些檔案不是要直接觀看的,而是要餵給 Intel Inspector 產生報告的。
接著,再執行一次 Intel Inspector 以產生報表:
$ inspxe-cl -report problems -result-dir ./r000mi1
報表的形式有好幾種,請依自己的需求選擇。
筆者平常使用 Valgrind 而非 Intel Inspector。但 Valgrind 僅支援 GNU/Linux 系統,對 Windows 使用者來說,可以試著用 Intel Inspector 檢查 C 或 C++ 程式。
使用 Intel System Studio 隨附的 IDE
除了從命令列使用 Intel C++ Compiler 外,也可以使用 Intel System Studio 隨附的 IDE。基本上這套 IDE 是特化版的 Eclipse。原本 Eclipse 是 Java IDE,後來演變為多語言 IDE,當然也包括 C 或 C++。
開啟 Intel System Studio 時先選擇 workplace:
第一次開啟 Intel System Studio 時會有 Getting Started 的歡迎畫面:
實際的編輯器界面如下:
在本節中,我們選擇 C Project:
從 Hello World 模板中建立專案:
選擇專案所用的 C 編譯器:
一開始專案的程式碼只有簡單幾行:
按下 IDE 上方的 Run As 即可編譯程式:
筆者平常不會依賴 IDE 來管理 C 或 C++ 專案,而會自己手寫 GNU Make 或 CMake 設定檔。本節內容僅留給需要的讀者參考。
繼續深入
在本文中,我們只介紹 Intel C++ Compiler 和其他的開發工具,但 Intel System Studio 還有一些可以注意的地方,像是數理運算的函式庫、多執行緒函式庫、加密函式庫、物聯網開發工具等。如果讀者的程式會在 Intel 平台上跑,可以去學習這些函式庫或開發工具的用法。
附記
在使用 Intel C++ Compiler 和 Intel Inspector 的過程中,筆者發現了一些小錯誤。像是 Intel Inspector 會有偽陽性,這些錯誤可能來自 Intel C++ Compiler 或外部函式庫。網路論壇中也提到有時 Intel C++ Compiler 編譯出來的程式會崩潰、無法使用。
由於 Intel C++ Compiler 的使用率較低,所以錯誤報告不多,無法確切得知 Intel C++ Compiler 的品質如何。如果程式只是用來跑科學運算,使用 Intel C++ Compiler 編譯應該無妨。如果是要對外發佈的程式或伺服程式,可能還是用 GCC 或 Clang 編譯較佳。