[OpenCL] 環境配置 on MacOS

步驟
步驟1: 安裝Xcode

首先,確保你已經安裝了Xcode,因為它包含了開發Mac應用所需的工具和編譯器。Xcode可以從Mac App Store免費下載。

步驟2: 創建新的Xcode項目
  1. 打開Xcode,選擇File > New > Project來創建一個新的項目。
  2. 選擇macOS下的Command Line Tool作為項目模板,然後點擊Next
  3. 輸入你的項目信息(比如項目名稱和保存位置),選擇C++作為語言選項(即使你打算使用C,因為Xcode的C++支持自動包含C),然後點擊NextCreate
步驟3: 配置項目以使用OpenCL
  1. 在項目導航器中,選擇你的項目來訪問項目設置。
  2. 找到Build Phases選項卡,展開Link Binary with Libraries部分。
  3. 點擊+按鈕來添加一個新的庫,搜索OpenCL.framework,然後將其添加到你的項目中。
步驟4: 編寫OpenCL代碼

在你的main.cpp(或main.c,如果你重命名了文件)中,你可以開始編寫OpenCL代碼。可以從上面提供的簡單例子開始,該例子展示了如何獲取可用的OpenCL設備。

步驟5: 編譯和運行

使用Xcode的構建和運行按鈕(通常位於窗口頂部的左上角)來編譯和運行你的程序。Xcode會自動處理編譯和鏈接過程,並在內置的終端中運行你的程序。

程式碼分享
結果
Number of platforms: 1
Platform #0:
Platform Name: Apple 
Platform Vendor: Apple
Platform Version: OpenCL 1.2 (Jun 23 2023 20:24:12)
    // 支援Platform 0的各個設備
	Number of devices: 1
	Device Name: Apple M2 Max
	Device Vendor: Apple
	Device Type: 4
	Device Version: OpenCL 1.2 

Platform Name: Apple -> 這表明你正在使用Apple提供的OpenCL平台。Apple的OpenCL實現是針對其硬件優化的,例如M系列晶片。

Platform Vendor: Apple -> 這是指提供OpenCL實現的供應商名稱,再次確認了平台是由Apple提供。

Platform Version: OpenCL 1.2 (Jun 23 2023 20:24:12) -> 這表示你的系統支持的OpenCL版本是1.2,後面的日期可能是這個OpenCL版本的發布或編譯日期。OpenCL 1.2是一個較早的標準,包含了核心並行計算功能,但可能不包括最新的OpenCL特性。

Device Name: Apple M2 Max -> 這是識別到的設備名稱,表明你的Mac Pro使用的是Apple的M2 Max晶片,這是一款集成了CPU和GPU的SoC。

Device Vendor: Apple -> 這再次確認了設備的供應商是Apple,與平台供應商一致。

Device Type: 4 -> 在OpenCL中,設備類型通過位字段表示,4對應於CL_DEVICE_TYPE_GPU,意味著識別到的設備是一個GPU。不同的數字代表不同的設備類型,例如1代表CPU,2代表加速器等。

Device Version: OpenCL 1.2 -> 這表示該設備支持的OpenCL版本是1.2,與平台版本一致。這個版本資訊對於開發者來說很重要,因為它決定了可以使用哪些OpenCL特性和函數。

Plaform跟Device的關係

我目前是把程式跑在Apple MacPro上,Device Tree如下

OpenCL Device Tree:
|
|-- Platform#1: Apple
    |-- Device#1: Apple M2 Max GPU


若是一台裝有兩張NVIDIA GPU和三張AMD GPU的Intel電腦上,Device Tree則會呈現以下分佈

OpenCL Device Tree:
|
|-- Platform#1: Intel
|   |-- Device#1: Intel CPU (主板上的內部顯示卡)
|
|-- Platform#2: NVIDIA
|   |-- Device#1: NVIDIA GPU 1
|   |-- Device#2: NVIDIA GPU 2
|
|-- Platform#3: AMD
    |-- Device#1: AMD GPU 1
    |-- Device#2: AMD GPU 2
    |-- Device#3: AMD GPU 3