OpenCL-0-基礎概念

原文地址:http://coderdock.com

OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的並行編程的開放式、免費標準。

OpenCL

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(xxx是與你的發行版本相對應的版本號,我的是384)。詳細安裝過程不再贅述。

  • 異構:什麼是異構,最簡單的X86和ARM就是最明顯的處理器架構,標準中說面向異構,那麼也就是說只需要編寫一次代碼,就能夠在不能的架構芯片上運行(功能怎麼有點像JAVA)。
  • 並行: 我們總是希望能夠有性能更高的的計算機。提高性能的方法之一是提高運行頻率,不過現在各家的CPU在4GHZ都卡了脖子。另外一種方式就是,把任務分發出去,讓不同的處理核心去進行。但如果處理不好,就成了簡單的堆砌核心,形成一核有難,七核圍觀的尷尬局面。所有有的專家就經過研究後提出了增加專門的處理單元,來提取異構單元中的每個並行項,是提升功率效率的唯一方法。我對這句話的理解就是農夫種田,漁民打魚,把合適的任務交給合適的處理單元來做,CPU處理控制,GPU處理大量簡單的運算。所以此處的並行就是指能夠提取並行項,並正確處理的意思。
  • 通用:既然說每一種架構都有其適合的處理任務類型,難道我要去學每一種架構的編程語言麼,非也,這就是OpenCL做的事情。它向上提供統一的編程接口,下面的具體實現由各個廠商去實習。

2.學什麼

  • 掌握所開發的異構系統的組成,(X86還是ARM總的分清吧,有幾個核總得知道吧)
  • 掌握這些設備的屬性(最簡單的CPU擅長邏輯,GPU擅長簡單運算)。
  • 使用合適的處理方式(任務並行或數據並行或兩者兼有之)將任務進行分解,轉化爲具體架構平臺上的指令(也稱爲內核)
  • 建立用於計算的數據結構和內存對象
  • 按照既定的順序執行內核
  • 覈驗結果

3.組成

  • 平臺模型: 可以理解爲我們所用的主機,該主機可能包含多個OpenCL設備(CPU GPU),每一個設備可能包含多個計算單元(CU),每一個計算單元又可能包含多個處理單元。
  • 執行模型: OpenCL執行程序時,在主機上執行控制程序,分發內核(執行程序)到多個處理設備。
  • 存儲模型:根據實際的存儲體系,OpenCL將內部存儲器抽象成四層結構的存儲器模型:全局內存、常量內存、本地內存、私有內存。
  • 編程模型:數據並行、任務並行、二者混合。

這一部分我們會在下一篇中進行詳細解釋。

發佈了11 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章