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

    前言

    除了桌面系統預設的 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 編譯較佳。

    電子書籍

    如果你覺得這篇 C 語言的技術文章對你有幫助,可以看看以下完整的 C 語言程式設計電子書:

    現代 C 語言程式設計

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤本站】
    Facebook Facebook Twitter Plurk