OpenCL设备存储形式
OpenCL設備存儲形式
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u011028771/article/details/78712830
一、淵源
??在碩士期間,由于實驗室項目需求,本人在GPU上完成了一些醫療成像算法的加速。由于人工智能的爆發,筆者順利找到了一份GPU優化的工作。如今即將畢業,筆者經過一年多的學習和應用,對于GPU編程有了基本的認識,因此在此編寫幾篇簡單的入門引導博客,幫助更多的人盡快入門,少走彎路。如果總結中存在問題,也希望讀者不吝賜教,共同探討。
??這個系列的博客主要介紹OpenCL編程的一些基礎知識,通過矩陣相乘的例子,讓讀者了解OpenCL并行計算的基本編程方法,同時通過幾種簡單的優化方法比較,讓讀者了解GPU優化的基本思想,另外也會簡單介紹涉及到的GPU架構相關的一些內容。由于旨在入門,本文只介紹簡單的基礎知識,不進行深入探討。
?? 在OpenCL的學習過程中筆者遇到過很多的困難,也有很多人給予了筆者很大的幫助。在此對他們表示感謝,感謝貓叔(貓頭鷹的翅膀)、長江、Zenny Chen以及OpenCL技術開發群中諸多朋友給予筆者的幫助。
二、GPU開發語言簡介
?? 在GPU開發中,當前的開發語言主要有OpenCL和CUDA。OpenCL和CUDA即是一種開發語言也是一種并行計算架構。CUDA是NIVIDA的并行計算架構,編程語言叫做CUDA C,也就是通常意義上說的CUDA,其語言是基于C語言語法的。CUDA僅用于NIVIDA的GPU設備開發。OpenCL是一種異構并行開發框架,是為異構計算設計的。它所支持的設備有CPU、GPU、FPGA甚至DSP等通用的或者專用的計算設備。因此OpenCL是面向CPU+其他計算設備這樣的異構計算平臺。同時OpenCL也是一種編程語言,也是基于C語言語法。
?? 當前AMD和NIVIDA是PC端的兩大GPU廠商,在移動端有ARM的MaLi,高通的Adreno,Imagination的PowerVR。從語言支持上看,所有的GPU都支持OpenCL,包括N卡和移動端GPU。但是很少有人在NIVIDIA GPU上使用OpenCL進行開發,因為CUDA有很好的生態,同時在N卡上CUDA會后很好的加速效果。CUDA僅支持N卡,不支持其他設備。
??在移動端的GPU開發方面,蘋果手機使用的是PowerVR的GPU(今年早些時候,蘋果宣布停止對PowerVR的使用,講自己研制GPU),但是它不支持OpenCL,它的開發使用的是蘋果的移動端并行開發語言metal,相對于OpenCL,metal更簡潔,吸取了OpenCL和CUDA的一些優點,做了一些改進。整體而言三種并行開發語言的思想想通,學會一個其他上手相對容易。
?? 除此之外,還有OpenACC等一些并行API,筆者沒有進行深入研究,不做評價。
三、OpenCL基本知識
?? OpenCL作為一種異構并行的編程架構,它屏蔽了底層的硬件結構,將其抽象為工作空間、工作組、工作項、全局存儲、局部存儲以及私有存儲等概念。本節主要介紹在GPU編程中,OpenCL關于這些抽象概念的組織結構,以及一些調度原則。關于GPU硬件架構方面的內容會在以后的博文中簡單介紹。
?? 首先介紹,工作空間、工作組以及工作項的組織關系。
??OpenCL的工作空間可以是一維的、二維的、三維的。可以通過OpenCL提供的API進行設置。本文展示了二維的工作空間,每一個工作空間包含若干個工作組,每個工作組又包含若干個工作項。每一個工作組中的工作項有一段共享的內存——局部內存(local memory)。可以通過具體的API查看工作組局部內存的大小。筆者使用的是AMD W7100顯卡,局部內存為32KB。每個工作組所包含的工作項的數量可以通過具體的API查到,筆者使用的顯卡為256。也就是說,每一個工作組包含256個(至多256,可以小于256)工作項和32KB的局部存儲器。32KB的局部內存對于工作組內的所有工作項是可見的,可用于組內數據的交換或者數據緩沖,對于其他工作組的工作項是不可見的。
?? 完成計算的最小單位就是工作項,開發者通過操作每個工作項來完成整個計算任務。舉一個簡單的例子,假設需要完成兩個二維矩陣的加法,矩陣維度為1024×1024。那么可以申請工作空間維度為1024×1024,每個工作項完成一組數據的加法,完成兩個矩陣相加。因為每個工作項都有全局索引和局部索引,而矩陣的存儲,不同的元素也有不同的索引,可以通過索引來設定每個工作項的計算任務。
??接下來介紹存儲器的組織形式。
?? 可以看到,這個存儲器分為三級,全局存儲器、局部存儲器和私有存儲器。全局存儲器對所有的工作項可見,但是訪問速度最慢;局部存儲器對工作組可見,訪問速度較高,超過告訴Cache,因此合理的使用Local,可以有效提升程序性能。除了局部內存外,每個工作項可以申請私有存儲,私有存儲一般對應的是寄存器,因此訪問的速度最快。但是私有存儲有限,例如筆者使用的顯卡每個SIMD(以后的博客中會詳細介紹)含有256個用于邏輯運算的寄存器。
??以上是OpenCL中關于計算和存儲的基本組織形式。
歡迎使用Markdown編輯器
你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,了解一下Markdown的基本語法知識。
新的改變
我們對Markdown編輯器進行了一些功能拓展與語法支持,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫博客:
功能快捷鍵
撤銷:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜體:Ctrl/Command + I
標題:Ctrl/Command + Shift + H
無序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
檢查列表:Ctrl/Command + Shift + C
插入代碼:Ctrl/Command + Shift + K
插入鏈接:Ctrl/Command + Shift + L
插入圖片:Ctrl/Command + Shift + G
合理的創建標題,有助于目錄的生成
直接輸入1次#,并按下space后,將生成1級標題。
輸入2次#,并按下space后,將生成2級標題。
以此類推,我們支持6級標題。有助于使用TOC語法后生成一個完美的目錄。
如何改變文本的樣式
強調文本 強調文本
加粗文本 加粗文本
標記文本
刪除文本
引用文本
H2O is是液體。
210 運算結果是 1024.
插入鏈接與圖片
鏈接: link.
圖片:
帶尺寸的圖片:
當然,我們為了讓用戶更加便捷,我們增加了圖片拖拽功能。
如何插入一段漂亮的代碼片
去博客設置頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的 代碼片.
// An highlighted block var foo = 'bar';生成一個適合你的列表
- 項目
- 項目
- 項目
- 項目
- 計劃任務
- 完成任務
創建一個表格
一個簡單的表格是這么創建的:
| 電腦 | $1600 |
| 手機 | $12 |
| 導管 | $1 |
設定內容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右
| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants將ASCII標點字符轉換為“智能”印刷標點HTML實體。例如:
| Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
| Quotes | "Isn't this fun?" | “Isn’t this fun?” |
| Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
創建一個自定義列表
Markdown如何創建一個注腳
一個具有注腳的文本。2
注釋也是必不可少的
Markdown將文本轉換為 HTML。
KaTeX數學公式
您可以使用渲染LaTeX數學表達式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n ? 1 ) ! ? n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n?1)!?n∈N 是通過歐拉積分
Γ ( z ) = ∫ 0 ∞ t z ? 1 e ? t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞?tz?1e?tdt.
你可以找到更多關于的信息 LaTeX 數學表達式here.
新的甘特圖功能,豐富你的文章
Mon 06 Mon 13 Mon 20 已完成 進行中 計劃一 計劃二 現有任務 Adding GANTT diagram functionality to mermaid- 關于 甘特圖 語法,參考 這兒,
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖::
張三 李四 王五 你好!李四, 最近怎么樣? 你最近怎么樣,王五? 我很好,謝謝! 我很好,謝謝! 李四想了很長時間, 文字太長了 不適合放在一行. 打量著王五... 很好... 王五, 你怎么樣? 張三 李四 王五這將產生一個流程圖。:
鏈接 長方形 圓 圓角長方形 菱形- 關于 Mermaid 語法,參考 這兒,
FLowchart流程圖
我們依舊會支持flowchart的流程圖:
Created with Rapha?l 2.2.0 開始 我的操作 確認? 結束 yes no- 關于 Flowchart流程圖 語法,參考 這兒.
導出與導入
導出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md文件或者.html文件進行本地保存。
導入
如果你想加載一篇你寫過的.md文件或者.html文件,在上方工具欄可以選擇導入功能進行對應擴展名的文件導入,
繼續你的創作。
mermaid語法說明 ??
注腳的解釋 ??
總結
以上是生活随笔為你收集整理的OpenCL设备存储形式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器访问服务器的流程
- 下一篇: G6-定制不同节点的参数 --组合图