OpenCL-0-基礎概念

  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將內部存儲器抽象成四層結構的存儲器模型:全局內存、常量內存、本地內存、私有內存。
  • 編程模型:數據並行、任務並行、兩者混合。

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

版權聲明:本文爲博主原創文章,轉載需聲明爲轉載內容並添加原文地址。spa

原文地址:http://coderdock.com命令行

相關文章
相關標籤/搜索