作者:LOGIC PD軟件策略總監MARK BENSON, 近幾年來,處理器從最求高性能轉向追求多內核。這種改變主要是由于量子效應(quantum effects)的作用難以實現高性能和低功耗的兼得,因而需要加速開發新的軟件技術。這些技術屬于通用運算塊,不但可應用于異構多核CPU,還可以應用于圖形加速器、數字信號處理器(DSP)以及現場可編程門陣列(FPGA),以加速算法,應對日益提高的運算性能要求。 OpenCL由蘋果公司提議開發,得到Khronos Group的維護,其開發目的是提供便攜式開放編程架構,這使得軟件可并行利用多核CPU和專用處理內核,特別是圖形處理器可實現并行處理非圖形處理。 OpenCL與OpenGL類似,也就是都可實現利用不可知設備開放標準以創建自定義實現。在設計上OpenCL可與OpenGL一同工作,也就是可共享架構數據,使用OpenCL完成的數據,接著可使用OpenGL顯示。OpenCL標準由2008年成立的工作組開發,Nvidia主持工作,Apple參與編輯。從那以后,OpenCL標準向后兼容的修訂版本經過一系列可用于驗證一致性的一致性測試完成發布。 OpenCL對現有處理器的一致性實現主要適用于芯片供應商(Altera, AMD, ARM, Freescale, Imagination Technologies, Intel, Nvidia, 德州儀器,賽靈思等)。 為加速運行OpenCL架構,需要使用針對這些供應商的OpenCL驅動器。 OpenCL與Nvidia的CUDA,Stanford的Brookand和微軟DirectCompute類似。 與這些語言相比,OpenCL具有開放、便攜、低端、與硬件較適應的特點,但在一定程度上較難使用。這主要是因為OpenCL用于支持異構內核并行處理的便攜式硬件抽象層。 OpenCL還形成基于帶有其他功能的C99子集的語言,可支持兩種不同的并行處理模式,即任務并行和數據并行。 任務并行是嵌入式模式,最為工程師所熟悉。任務并行一般利用多線程OS實現,以便于不同的線程可同時運行。在線程需要訪問共享資源時,可利用互斥器、信號或其他各類的鎖定機制。 OpenCL支持這種程序模式,但這并不是其強大功能。 數據并行可應用于使用跨數據集進行同一操作的算法。在數據并行模式中,一種運行如框過濾器具有并行性,這樣同一微算法可并行運行多次,但這種算法的各項實例化可在其自身的數據子集上運行——這樣實現了數據并行。這是最適于OpenCL支持的程序模式。OpenCL的五種兼容交叉模式有助于解釋這些概念。這些模式是架構、平臺、執行、內存和程序。 OpenCL架構包括平臺層、運行時間和編譯器。平臺允許主程序查詢可用設備,創建前后關系。運行時間允許主程序操縱前后關系。編譯器創建可執行程序并基于帶有一些其他語言功能的C99子集以支持并行程序。為向芯片供應商提供OpenCL一致性,需要提供啟動架構運行的OpenCL驅動器。 通過連接一個或多個器件的主機定義平臺,如GPU。各器件被分為一個或多個的運算單元,如內核。各運算單元被分為一個或多個處理元件。 OpenCL程序執行發生在兩處:在器件上執行的內核,最常見的是GPU,以及在主機器件上執行的主機程序,最常見的是CPU。 要了解執行模式,最好先了解內核如何運行。主機計劃執行內核時,需要定義索引空間。內核實例(工作項)執行這個索引空間的各個項目。 在OpenCL中,索引空間被表示為NDRange。NDRange是一維、二維、或三維索引空間。NDRange的圖形表示如圖1。主機定義內核使用的前后關系。前后關系包括器件表、內核、源代碼和內存對象。通過主機產生和維護前后關系。另外,主機利用叫作命令隊列的OpenCL API創建數據結構。主機通過命令隊列安排內核在器件上運行。 ![]() 圖 1 NDRange的圖形表示 可在命令隊列上放置的命令包括內核執行命令、內存管理命令和同步命令。同步命令用于限制其他命令的執行順序。通過在OpenCL命令隊列放置命令,運行時間可在系統內處理在器件并行完成的命令。 執行內核的工作項目可訪問下列內存: • 全局內存——適用于所有工作組的所有工作項目。 • 常量內存——由主機初始化,在整個內核壽命中內存保持為常量。 • 本地內存——由工作組共享的內存。 • 私有內存——單個工作項目私有的內存。 正如上文所述,OpenCL主要支持兩種程序模式:數據并行,即各處理器在分布式數據的不同條目上執行同一任務;任務并行,即在共同的數據集上執行多個任務。在各類并行程序中,運行中并行線程同步被視為首選。OpenCL為并行處理間的同步控制提供三種方式。第一種方式是在索引空間內創建以限制某個工作項目以便使工作項目按順序運行。第二種方式是在命令隊列內建障礙以限制命令順序。第三種方式是在命令隊列內創建由命令生成的事件。這些事件的運行可強制順序操作。 例如使用工具OpenCL特別適用于圖像/視頻編輯應用程序, AI 系統,模型架構,游戲物理,電影渲染,和增強現實。但主要在嵌入式移動器件中還設置了為OpenCL標準定義的嵌入式配置文件,包括整個OpenCL標準的子集。OpenCL嵌入式配置文件包括以下幾個亮點: • 64位整數(可選) • 3D圖形支持(可選) • 為浮點計算放寬估算規則 • 提高嵌入式器件轉換的準確度 • 內置原子函數(可選) 展望未來,OpenCL路線圖包括幾項計劃,以提高OpenCL至下一個相關程度。 高級模式(OpenCL-HLM):OpenCL目前正探索通過語言構件整合器件和主機執行環境,以便提高OpenCL的易用性。如果實現這項計劃,OpenCL的應用將更加廣泛。 長期重要路線圖:OpenCL正不斷探索加強內存和執行模式的方式,以利用不斷更新的硬件功能。另外,OpenCL正不斷努力利用經優化的同步工具,使并行程序模式在 OpenCL 運行得更加強健。 WebCL: OpenCL的愿景是通過Java腳本綁定件進行并行運算。 標準并行中間表示(OpenCL-SPIR):OpenCL計劃擺脫創建編譯器和語言綁定件的業務。創建標準化中間表示,可通過不屬于OpenCL內核團隊的工程師將OpenCL綁定至新語言,這樣可擴大OpenCL的應用范圍,并使得OpenCL中間表示成為現在乃至未來編譯器的目標。 OpenCL前景光明,但仍面臨著許多問題亟待解決,工作組的當前計劃已經解決了其中的很多問題。在下一個運算階段,我們預測處理內核將會劇增,包括異構CPU和異構CPU/GPU,我們仍將需要成熟軟件架構,這有助于使我們利用所有硬件運算功能,將其應用于我們的系統。在這種大趨勢下,OpenCL被堅持定位為開放、自由、成熟的標準,得到行業支持,并將擁有光明的未來。 LogicPD Eden Prairie, MN. (952) 941-8071 www.logicpd.com Khronos集團 www.khronos.org 原文出處 http://www.rtcmagazine.com/articles/view/102657 |