OpenCL 3.1 正式發布


OpenCL™(開放運算語言)是一種開放、免版稅的跨平台平行程式設計標準,適用於超級電腦、雲端伺服器、個人電腦、行動裝置和嵌入式平台等各種加速器。 OpenCL 大幅提升了許多市場領域內各類應用的運作速度和反應能力,包括專業創意工具、科學和醫療軟體、視覺處理以及神經網路訓練和推理等。

OpenCL 工作小組發布了 OpenCL 3.1,將廣泛部署、經過現場驗證的功能引入核心規範,以擴展功能,包括 SPIR-V 資料攝取,開發人員可以在符合規範的實現中依賴這些功能。

OpenCL 3.1 強制要求的功能目前以擴充或選用功能的形式部署。這是有意為之。OpenCL 工作小組遵循規範的演進原則:首先在實際應用中驗證擴充功能的有效性,觀察它們在各種實作中的使用情況,根據開發者的回饋進行改進,最終才將其納入核心規範。

OpenCL 3.1 強制要求的功能將在所有符合規範的實作中可靠地提供,因此無需在應用程式程式碼中進行功能檢查或回退路徑。 

重點更新

  • 強制性 SPIR-V
  • 人工智慧和高效能運算工作負載的建構模組

其他一些改進

  • 開發者無需依賴擴充功能即可使用新的語言特性。這意味著內核程式碼更簡潔、更易於移植,能夠在所有符合規範的實作中可靠地編譯,而無需特定於供應商的擴展保護。
  • OpenCL C 的 printf 函數實作現在支援 z (size_t) 和 t (ptrdiff_t) 長度修飾符。這彌合了與標準 C 之間長期存在的移植性差距,使得設備端偵錯輸出能夠正確格式化指標大小和差值類型的值,而無需進行類型轉換或使用格式化字串等變通方法。
  • CL_DEVICE_HOST_UNIFIED_MEMORY 的語意已被澄清,現在可用於區分整合式顯示卡和獨立顯示卡。應用程式現在可以可靠地使用此標誌在運行時選擇記憶體分配策略——例如,在主機和裝置共享相同實體記憶體的整合式顯示卡上,跳過顯式緩衝區複製。
  • 可以將本地記憶體核心參數設為零,以表示不需要本地記憶體。這樣,對於那些不需要本地內存的配置,即使內核偶爾會使用本地內存,也可以無需單獨的程式碼路徑來分發這些內核。
  • 現在,事件狀態為 CL_COMPLETE 即為同步點,無需再像以前那樣明確等待。這消除了一個不易察覺的正確性風險,即輪詢事件狀態的程式碼可能與記憶體可見性發生競爭,從而使事件驅動的同步更加簡單且形式上更安全。
  • 記憶體模型的「包含作用域」規則已放寬,作用域不再需要完全匹配。這意味著更細粒度的作用域現在可以滿足更粗粒度的同步需求。

留言