OpenCL-0-基礎概念
阿新 • • 發佈:2018-01-12
net 詳細 體系 ast 任務分發 gpu 異構 方式 行程 OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的並行編程的開放式、免費標準。
(xxx是與你的發行版本相對應的版本號,我的是384)。詳細安裝過程不再贅述。
1.是什麽
OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的並行編程的開放式、免費標準。
有標準,就得有實現,目前而言,intel、Nvidia、ARM、AMD、QUALCOMM、Apple都有其對應的OpenCL實現。在這個系列中,我們著眼於OpenCL的語法以及編程概念。不去深究各家實現的異同。
我所使用的Nvidia的實現。在我的電腦上,顯卡是 GTX-960M,去Nvidia官網下載相應的cuda-tool-kit進行安裝,以及使用命令行安裝sudo apt-get install nvidia-opencl-dev nvidia-opencl-icd-xxx
- 異構:什麽是異構,最簡單的X86和ARM就是最明顯的處理器架構,標準中說面向異構,那麽也就是說只需要編寫一次代碼,就能夠在不能的架構芯片上運行(功能怎麽有點像JAVA)。
- 並行: 我們總是希望能夠有性能更高的的計算機。提高性能的方法之一是提高運行頻率,不過現在各家的CPU在4GHZ都卡了脖子。另外一種方式就是,把任務分發出去,讓不同的處理核心去進行。但如果處理不好,就成了簡單的堆砌核心,形成
一核有難,七核圍觀
的尷尬局面。所有有的專家就經過研究後提出了增加專門的處理單元,來提取異構單元中的每個並行項,是提升功率效率的唯一方法
農夫種田,漁民打魚
,把合適的任務交給合適的處理單元來做,CPU處理控制,GPU處理大量簡單的運算。所以此處的並行就是指能夠提取並行項,並正確處理
的意思。 - 通用:既然說每一種架構都有其適合的處理任務類型,難道我要去學每一種架構的編程語言麽,非也,這就是OpenCL做的事情。它向上提供統一的編程接口,下面的具體實現由各個廠商去實習。
2.學什麽
- 掌握所開發的異構系統的組成,(X86還是ARM總的分清吧,有幾個核總得知道吧)
- 掌握這些設備的屬性(最簡單的CPU擅長邏輯,GPU擅長簡單運算)。
- 使用合適的處理方式(任務並行或數據並行或兩者兼有之)將任務進行分解,轉化為具體架構平臺上的指令(也稱為內核)
- 建立用於計算的數據結構和內存對象
- 按照既定的順序執行內核
- 核驗結果
3.組成
- 平臺模型: 可以理解為我們所用的主機,該主機可能包含多個OpenCL設備(CPU GPU),每一個設備可能包含多個計算單元(CU),每一個計算單元又可能包含多個處理單元。
- 執行模型: OpenCL執行程序時,在主機上執行控制程序,分發內核(執行程序)到多個處理設備。
- 存儲模型:根據實際的存儲體系,OpenCL將內部存儲器抽象成四層結構的存儲器模型:全局內存、常量內存、本地內存、私有內存。
- 編程模型:數據並行、任務並行、二者混合。
這一部分我們會在下一篇中進行詳細解釋。
版權聲明:本文為博主原創文章,轉載需聲明為轉載內容並添加原文地址。
原文地址:http://coderdock.com
OpenCL-0-基礎概念