ATI Stream SDK v2.0 正式版,支援 OpenCL 1.0!


之前有貼過,AMD 在 Stream SDK 2.0 Beta 中有提供 OpenCL 的開發套件了。不過,當時還只是測試版;而現在,Stream SDK 2.0 終於出正式版囉~官方網頁如下:

http://developer.amd.com/gpu/ATIStreamSDK/Pages/default.aspx

而官方得更新內容則是:

  • 第一個支援 OpenCL 1.0 的正式版 ATI Stream SDK。
  • 新增:支援 OpenCL™ ICD (Installable Client Driver)。關於 OpenCL ICD 的詳細,請參考此技術文章
  • 新增:支援 32-bit integer 的 atomic function。
  • 新增:將效能分析工具 ATI Stream Profiler 整合到 Microsoft Visual Studio 2008。功能包含了:
    • measures OpenCL kernel execution time
    • queries memory traffic with GPU
    • compares runs of OpenCL programs
    • retrieves IL and ISA code for an OpenCL kernel
  • 預覽:支援 OpenCL™ / OpenGL interoperability。詳細資料請參考此技術文章
  • 預覽:支援 OpenCL™ / Microsoft DirectX 10 interoperability。詳細資料請參考此技術文章
  • 預覽:在 OpenCL 的 C kernel 中支援雙精度浮點數的基本運算。詳細資料請參考此技術文章
  • 更新 OpenCL™ runtime,讓他有條件地讀取 ATI CAL runtime libraries,讓他可以在沒有安裝 ATI Catalyst™ 的情形下,也可以在相容的 CPU 上執行。
  • 更新 OpenCL™ runtime,允許在單一使用者程式中同時使用 OpenCL™ 和 ATI CAL API。
  • 更新 Khronos OpenCL working group 釋出的 cl.hpp。
  • 各種 OpenCL™ 編譯器和 runtime 的修正與加強。詳細請參考 developer release notes

而這次的版本在作業系統的支援上,還是 WIndows XP / Vista / 7 ,以及 openSUSE™ 11.0 和 Ubuntu® 9.04 的 32 位元與 64 位元版本;編譯器則是支援 Visual Studio 2008 專業版、GNU Compiler Collection (GCC) 4.3、Intel® C Compiler (ICC) 11.x。硬體的部分,GPU 是支援 ATI Radeon™ HD 4000 以後的顯示卡、CPU 則是需要支援 SSE 3.x 以上的 x86 處理器。

而這次的更新中比較重要的,應該就是對於 OpenCL™ ICD 的支援了~透過這個 ICD,可以讓不同廠商(nVIDIA、AMD)的 OpenCL implementation 可以同時存在於同一個系統裡,並在執行時再透過 clGetPlatformIDs()clGetPlatformInfo() 來取得目前可以使用的 OpenCL implementation 清單,並選擇要使用哪種裝置來做 OpenCL 的計算。(以前似乎也可以就是了,不過因為沒有玩過,所以不確定 XD)

同時他也讓 OpenCL 的程式不需要安裝 ATI Catalyst™,就可以在 CPU 上運作。這些功能可以讓一個 OpenCL 程式可以只要編譯一次,就可以在不同的 OpenCL 裝置上執行了~

實際上目前透過 nVIDIA GPU Computing SDK 所編譯出來的 OpenCL 程式,可以直接拿到有安裝 ATI Stream SDK 2.0 的電腦上執行(只有 ATI 的顯示卡驅動程式似乎還是不行) ;將 ATI Stream SDK 2.0 編譯出來的 OpenCL 程式,拿到有安裝 nVIDIA 支援 OpenCL 驅動程式的電腦上,也可以正常運作。這應該是因為 nVIDIA 直接把 OpenCL ICD 放在顯示卡的驅動程式中,而 AMD 將 OpenCL 將 ICD 放在 SDK 中的關係。


而目前 Heresy 有大概測試一下,Heresy 是用 ATI Stream SDK 裡偵測 OpenCL Device 的範例程式、CLInfo 來做測試的:

  • 在 Intel Core i7 + ATI Radeon HD 4870×2 的 Windows Vista x64 下,安裝 Stream SDK 2.0 後,CLInfo 會透過 ATI 的 OpenCL ICD 抓到 i7 CPU、也可以抓到兩顆 ATI 的 GPU。
  • 在 Intel Core 2 Quad + nVIDIA GeForce GTX 285 的 Windows XP x64 下,僅安裝支援 OpenCL 的 GeForce 驅動程式,CLInfo 會透過 nVIDIA GeForce 驅動程式的 OpenCL ICD 抓到 nVIDIA 的 GPU,但是沒辦法抓到 CPU。
  • 在 Intel Core 2 Quad + nVIDIA GeForce GTX 260 的 Windows XP x64 下,如果沒有安裝支援 OpenCL 的 GeForce 驅動程式、也沒有安裝 Stream SDK 2.0 的話,CLInfo 會因為沒有 OpenCL.dll 而沒有辦法執行;即使手動複製 Stream SDK 提供的 OpenCL.dll,依然沒有辦法正常取得 OpenCL 的裝置。
  • 在 AMD CPU + nVIDIA GeForce GTX 285 的 Windows XP x64 下,如果除了有安裝支援 OpenCL 的 GeForce Driver 外,也安裝 Stream SDK 的話,則會取決於 CLInfo 執行時所使用的 OpenCL ICD(實際上應該是看讀到誰提供的 OpenCL.dll)。如果是使用 nVIDIA 的話,則只會抓到 nVIDIA 的 GPU 而無法抓到 CPU;如果是 AMD 的話,則只會抓到 CPU、沒辦法抓到 nVIDIA 的 GPU。

這也代表了:

  • 使用 nVIDIA GeForce Driver 裡的 OpenCL ICD 的話,就只能偵測到 nVIDIA 的 GPU,沒辦法使用 CPU 來當 OpenCL Device。
  • 使用 ATI Stream SDK 2.0 裡的 OpenCL ICD 的話,可以偵測到支援的 CPU 和 ATI GPU,但是沒辦法使用 nVIDIA 的 GPU 來當 OpenCL device。

也就是說呢,以現況來看,拿到一個 OpenCL 程式後,能用哪種裝置跑,也會取決於電腦上安裝的 OpenCL ICD;目前簡單測試的結果,似乎是沒有辦法在一個 OpenCL 程式同時支援 CPU / nVIDIA GPU / ATI GPU 了…真要控制,可能還要再額外去控制程式所使用的 OpenCL.dll 了…

而 ATI 和 nVIDIA 互斥這件事是不讓人訝異,但是比較慘的是使用 nVIDIA 的方案,目前似乎還不能選擇要用 CPU 來執行 OpenCL…這或許會是之後 OpenCL 要能廣泛使用的一個問題吧?

在 ATI 方面比較可惜的是,雖然 ATI 的方案可以在沒有安裝 ATI GPU 的電腦上以 CPU 當作 OpenCL device 來執行 OpenCL 程式,但是卻還是需要安裝 Stream SDK 2.0;目前 Heresy 也還不知道要怎麼讓一台沒有裝 Stream SDK 的電腦,以 CPU 或 ATI GPU 來執行 OpenCL 的程式…這樣如果是要 release 程式給其他人使用,或許會有些麻煩…

而另外更大一個問題,就是 Intel 什麼時候會推出針對自家 CPU 做最佳化的 ICD 了(GPU?慢慢等)~

另外,Heresy 測試 ATI 顯示卡的環境是在 Windows Vista x64 上,在執行 OpenCL 相關函式的時候,似乎都會發生明顯的螢幕閃爍的現象,這個應該是 Vista 的關係吧?


對「ATI Stream SDK v2.0 正式版,支援 OpenCL 1.0!」的想法

  1. […] 而 OpenCL 的部份由於 nVIDIA 的 OpenCL ICD 優先序似乎是比 ATI Stream SDK 來的高,所是是會抓到 nVIDIA 的顯示卡。如果手動將 ATI 的 OpenCL ICD 複製到 CPU Caps Viewer 的執行目錄的話,則會讓 OpenCL 的項目,變成是以 ATI 的為主;這點倒是和 Heresy 之前在測試 OpenCL 時的狀況是相同的,也就是在目前來說,就算一台電腦上同時插了這兩家的顯示卡,要能動態調整要使用哪家卡來做 OpenCL 計算,基本上還件麻煩事… […]

  2. 在 Windows Vista 下應該是執行 OpenCL 也會導致 Aero 模式切換的原因,XP 也會閃爍?不知道是怎樣的狀況了…

  3. 我用XP 32bit/8800GT 跑OpenGL也會有明顯的閃爍現象,而其他使用intel內顯的舊電腦卻不會。

  4. 感謝您的資訊~目前看來還是只能期待各家廠商推出新的 OpenCL 的 ICD 了…此外,目前應該已經研究出來怎麼把 Stream SDK 2.0 提供的 OpenCL ICD 移到其他電腦上了~這樣至少在一般電腦上,也可以用 CPU 跑 OpenCL 了!不過目前大部分的 demo,都是指定用 GPU 跑就是了…

  5. Hi,就目前的瞭解,情形是這樣的:
    1. AMD 目前的 driver 已經支援 OpenCL,但是仍未內建 OpenCL ICD,所以一定還是要安裝 ATI Stream SDK 2.0 才行。
    這點 AMD 有表示,未來的 driver 將會內建 OpenCL ICD。

    2. 目前 AMD 使用的 OpenCL ICD 版本似乎比 NVIDIA 的為新,因此兩者目前無法共存(如果使用 AMD 提供的 OpenCL.dll 則只能看到 AMD 的 platform,反之則只能看到 NVIDIA 的 platform)。
    但是這點未來應該能解決。若順利解決的話,理論上同一系統中,將可以同時共存兩個 OpenCL platform,即 AMD 以及 NVIDIA 提供的。這點對於系統上同時安裝兩種顯示卡時特別重要。

    3. 目前仍只有 AMD 在 Windows 下提供支援 CPU 的 OpenCL implementation。
    未來 AMD 是否會提供此 implementation 給沒有安裝 AMD 顯示卡的使用者還不明(目前沒有 AMD 顯示卡的使用者,仍可透過安裝 ATI Stream SDK 2.0 來取得,但是這需要在 AMD 網站註冊,且不能隨附在應用程式中)。
    這點可能要從 OpenCL 在 CPU 上的使用率來決定。若很多人認為 OpenCL 在 CPU 上也有相當價值,則 AMD 甚至 Intel 可能就會提供獨立的 OpenCL CPU implementation。

    4. 在 NVIDIA 新的 driver 以及 AMD Stream SDK 2.0 中所附的 OpenCL.dll 並不是 OpenCL implementation,而只是一個由 Khronos 提供的「介面」。
    它會從 registry 中找到系統中所有的 OpenCL implementation 的 dll 檔(例如在 AMD 的情形中是 atiocl.dll 以及 atiocl64.dll,而在 NVIDIA 的情形中則是 nvcuda.dll),這就為什麼理論上它應該可以同時支援多種裝置。
    不過目前的情形,如同前面提過的,可能因為版本不同的原因還無法同時共存。這也是為什麼只 copy OpenCL.dll 是不夠的,系統上仍需要有安裝 OpenCL implementation 才行。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.