高通SNPE - OpenCL簡介(1)

weixin_38498942發表於2020-11-05

OpenCL背景和概述

OpenCL由Khronos集團開發和維護,是一種開放且免版稅的標準用於異構系統中的跨平臺並行程式設計。它是幫助開發人員利用現代異構中可用的海量計算能力系統,極大地促進了跨平臺的應用程式開發。高通®的Adreno TM上的Snapdragon平臺GPU系列一直是最早移動的一個完全支援OpenCL的GPU之一。

在這裡插入圖片描述
圖中顯示了支援OpenCL的典型異構系統。在這個系統中,主要分為三個部分:

  • 主機CPU本質上是一個命令器/主裝置,用於管理和控制主機應用。
  • 多個OpenCL裝置,包括GPU,DSP,FPGA和硬體加速器。
  • 由主機編譯並載入到OpenCL裝置以執行的核心程式碼。

手機上的OpenCL

近年來,移動晶片系統(SOC)在計算方面取得了顯著進步功能,複雜性和功能。移動SOC(移動GPU)中的GPU非常功能強大,某些頂級移動GPU在以下方面達到了控制檯/離散GPU的水平:原始計算能力。這給開發人員帶來了挑戰:如何有效利用計算能力和在不瞭解GPU底層細節的情況下快速開發應用程式,而維護不同SOC之間的應用程式相容性?為解決這些問題而建立的OpenCL使開發人員可以輕鬆利用計算能力得益於其跨平臺支援,移動SOC的數量有所增加。通過使用OpenCL,移動SOC可以輕鬆實現啟用許多領域的高階用例,例如影像/視訊處理,計算機視覺,機器學習等在QTI中,使用帶有Adreno GPU的OpenCL已成功加速了許多用例,表現出出色的效能,功能和便攜性。強烈建議將OpenCL與GPU結合使用可加速其在Snapdragon SOC上的應用。

OpenCL標準

OpenCL標準主要包含兩個元件,即OpenCL執行時API和OpenCL C語言。API定義了一組在主機上執行的資源功能管理,核心分發和許多其他任務,而OpenCL C語言用於編寫在OpenCL裝置上執行的核心。OpenCL API和OpenCL C語言將是在以下各節中進行了回顧。

OpenCL API函式

OpenCL API函式可以分為兩類,平臺層和執行時。下表總結了平臺層的高階功能以及相對的執行時層級。

在這裡插入圖片描述
在這裡插入圖片描述
瞭解這兩層對於編寫OpenCL應用程式至關重要。

OpenCL C語言

作為C99標準的子集,OpenCL C語言用於編寫可在裝置上編譯和執行。具有C語言程式設計經驗的開發人員可以輕鬆開始使用OpenCL C程式設計。但是,瞭解C99標準和OpenCL C語言之間的差異,以避免常見錯誤。這是兩個主要區別:∎由於硬體限制,OpenCL C語言不支援C99中的某些功能和OpenCL執行模型。示例是函式指標和動態記憶體分配(malloc / calloc等)。∎OpenCL C語言在幾個方面擴充套件了C99標準,以便更好地進行開發。服務於其程式設計模型並促進開發,例如:□它新增了內建函式來查詢OpenCL核心執行引數。□它具有可以利用GPU硬體的影像載入/儲存功能。

相關文章