位元詩人 [C 語言] 程式設計教學:用 Intel C++ Compiler 編譯 C 或 C++ 程式

C 語言編譯器
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

除了桌面系統預設的 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 C++ Compiler 的首頁

可以在 Intel Parallel Studio 和 Intel System Studio 中擇一。我們的目的只是要用 C 編譯器,故下載 Intel System Studio 即可:

選擇 Intel System Studio

這裡只是簡單的說明頁。繼續按下一步即可:

Intel System Studio 的說明頁面

這裡特別說到 Intel System Studio 可以免費使用,只要每年更新使用許可就可以繼續使用。按下一步開始選擇所要安裝的軟體:

Intel System Studio 的授權模式

在安裝 Intel System Studio 時,不是一口氣就安裝所有的軟體,而是像點菜般選擇自己所需的部分:

在 Intel System Studio 中選擇軟體

我們只選擇了 Intel C++ Compiler、Intel Inspector、GDB:

在 Intel System Studio 中所選擇的軟體

讀者不一定要和我們選一樣的軟體,可以隨自己需求更動軟體清單。

註冊不是強制的,所以我們不註冊,直接下載軟體:

略過註冊直接下載 Intel System Studio

根據自己的宿主系統和目標系統來選擇即可:

在 Intel System Studio 中選擇適合自己的宿主系統和目標系統

由於筆者是在 GNU/Linux 上展示安裝過程,故下載到 tarball。若是在 Windows 上,則會下載到安裝程式:

下載 Intel System Studio 的 tarball

接著,啟動安裝程式。一開始先選擇安裝位置:

選擇 Intel System Studio 的安裝路徑

在 GNU/Linux 安裝 Intel System Studio 時,預設會安裝到 $HOME/intel 上。

按照慣例,會有落落長的軟體授權文件。有興趣的讀者可以自己看一下:

Intel System Studio 的授權文件

Intel System Studio 會收集一些匿名資料,讀者可自行決定要不要提供這些資料:

Intel System Studio 會收集匿名資料

筆者在測試時,是使用 openSUSE Leap 15.1。這並非 Intel System Studio 官方認定的系統。實際上仍然可以使用:

Intel System Studio 會偵測系統是否支援

安裝精靈會展示出安裝的軟體:

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.shcompilarvars.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.shinspxe-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 的 workplace

第一次開啟 Intel System Studio 時會有 Getting Started 的歡迎畫面:

Intel System Studio 的歡迎頁面

實際的編輯器界面如下:

Intel System Studio 的編輯器

在本節中,我們選擇 C Project:

在 Intel System Studio 中建立 C 專案

從 Hello World 模板中建立專案:

在 Intel System Studio 中選擇 Hello World 範例

選擇專案所用的 C 編譯器:

在 Intel System Studio 中選擇 C 編譯器

一開始專案的程式碼只有簡單幾行:

Intel System Studio 的 HelloWorld 範例程式碼

按下 IDE 上方的 Run As 即可編譯程式:

在 Intel System Studio 中編譯 C 程式碼

筆者平常不會依賴 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 編譯較佳。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。