日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCL设备存储形式

發(fā)布時(shí)間:2024/3/13 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCL设备存储形式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OpenCL設(shè)備存儲(chǔ)形式



版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/u011028771/article/details/78712830



一、淵源

??在碩士期間,由于實(shí)驗(yàn)室項(xiàng)目需求,本人在GPU上完成了一些醫(yī)療成像算法的加速。由于人工智能的爆發(fā),筆者順利找到了一份GPU優(yōu)化的工作。如今即將畢業(yè),筆者經(jīng)過一年多的學(xué)習(xí)和應(yīng)用,對于GPU編程有了基本的認(rèn)識(shí),因此在此編寫幾篇簡單的入門引導(dǎo)博客,幫助更多的人盡快入門,少走彎路。如果總結(jié)中存在問題,也希望讀者不吝賜教,共同探討。
??這個(gè)系列的博客主要介紹OpenCL編程的一些基礎(chǔ)知識(shí),通過矩陣相乘的例子,讓讀者了解OpenCL并行計(jì)算的基本編程方法,同時(shí)通過幾種簡單的優(yōu)化方法比較,讓讀者了解GPU優(yōu)化的基本思想,另外也會(huì)簡單介紹涉及到的GPU架構(gòu)相關(guān)的一些內(nèi)容。由于旨在入門,本文只介紹簡單的基礎(chǔ)知識(shí),不進(jìn)行深入探討。
?? 在OpenCL的學(xué)習(xí)過程中筆者遇到過很多的困難,也有很多人給予了筆者很大的幫助。在此對他們表示感謝,感謝貓叔(貓頭鷹的翅膀)、長江、Zenny Chen以及OpenCL技術(shù)開發(fā)群中諸多朋友給予筆者的幫助。

二、GPU開發(fā)語言簡介

?? 在GPU開發(fā)中,當(dāng)前的開發(fā)語言主要有OpenCL和CUDA。OpenCL和CUDA即是一種開發(fā)語言也是一種并行計(jì)算架構(gòu)。CUDA是NIVIDA的并行計(jì)算架構(gòu),編程語言叫做CUDA C,也就是通常意義上說的CUDA,其語言是基于C語言語法的。CUDA僅用于NIVIDA的GPU設(shè)備開發(fā)。OpenCL是一種異構(gòu)并行開發(fā)框架,是為異構(gòu)計(jì)算設(shè)計(jì)的。它所支持的設(shè)備有CPU、GPU、FPGA甚至DSP等通用的或者專用的計(jì)算設(shè)備。因此OpenCL是面向CPU+其他計(jì)算設(shè)備這樣的異構(gòu)計(jì)算平臺(tái)。同時(shí)OpenCL也是一種編程語言,也是基于C語言語法。
?? 當(dāng)前AMD和NIVIDA是PC端的兩大GPU廠商,在移動(dòng)端有ARM的MaLi,高通的Adreno,Imagination的PowerVR。從語言支持上看,所有的GPU都支持OpenCL,包括N卡和移動(dòng)端GPU。但是很少有人在NIVIDIA GPU上使用OpenCL進(jìn)行開發(fā),因?yàn)镃UDA有很好的生態(tài),同時(shí)在N卡上CUDA會(huì)后很好的加速效果。CUDA僅支持N卡,不支持其他設(shè)備。
??在移動(dòng)端的GPU開發(fā)方面,蘋果手機(jī)使用的是PowerVR的GPU(今年早些時(shí)候,蘋果宣布停止對PowerVR的使用,講自己研制GPU),但是它不支持OpenCL,它的開發(fā)使用的是蘋果的移動(dòng)端并行開發(fā)語言metal,相對于OpenCL,metal更簡潔,吸取了OpenCL和CUDA的一些優(yōu)點(diǎn),做了一些改進(jìn)。整體而言三種并行開發(fā)語言的思想想通,學(xué)會(huì)一個(gè)其他上手相對容易。
?? 除此之外,還有OpenACC等一些并行API,筆者沒有進(jìn)行深入研究,不做評價(jià)。

三、OpenCL基本知識(shí)

?? OpenCL作為一種異構(gòu)并行的編程架構(gòu),它屏蔽了底層的硬件結(jié)構(gòu),將其抽象為工作空間、工作組、工作項(xiàng)、全局存儲(chǔ)、局部存儲(chǔ)以及私有存儲(chǔ)等概念。本節(jié)主要介紹在GPU編程中,OpenCL關(guān)于這些抽象概念的組織結(jié)構(gòu),以及一些調(diào)度原則。關(guān)于GPU硬件架構(gòu)方面的內(nèi)容會(huì)在以后的博文中簡單介紹。
?? 首先介紹,工作空間、工作組以及工作項(xiàng)的組織關(guān)系。

??OpenCL的工作空間可以是一維的、二維的、三維的。可以通過OpenCL提供的API進(jìn)行設(shè)置。本文展示了二維的工作空間,每一個(gè)工作空間包含若干個(gè)工作組,每個(gè)工作組又包含若干個(gè)工作項(xiàng)。每一個(gè)工作組中的工作項(xiàng)有一段共享的內(nèi)存——局部內(nèi)存(local memory)。可以通過具體的API查看工作組局部內(nèi)存的大小。筆者使用的是AMD W7100顯卡,局部內(nèi)存為32KB。每個(gè)工作組所包含的工作項(xiàng)的數(shù)量可以通過具體的API查到,筆者使用的顯卡為256。也就是說,每一個(gè)工作組包含256個(gè)(至多256,可以小于256)工作項(xiàng)和32KB的局部存儲(chǔ)器。32KB的局部內(nèi)存對于工作組內(nèi)的所有工作項(xiàng)是可見的,可用于組內(nèi)數(shù)據(jù)的交換或者數(shù)據(jù)緩沖,對于其他工作組的工作項(xiàng)是不可見的。
?? 完成計(jì)算的最小單位就是工作項(xiàng),開發(fā)者通過操作每個(gè)工作項(xiàng)來完成整個(gè)計(jì)算任務(wù)。舉一個(gè)簡單的例子,假設(shè)需要完成兩個(gè)二維矩陣的加法,矩陣維度為1024×1024。那么可以申請工作空間維度為1024×1024,每個(gè)工作項(xiàng)完成一組數(shù)據(jù)的加法,完成兩個(gè)矩陣相加。因?yàn)槊總€(gè)工作項(xiàng)都有全局索引和局部索引,而矩陣的存儲(chǔ),不同的元素也有不同的索引,可以通過索引來設(shè)定每個(gè)工作項(xiàng)的計(jì)算任務(wù)。
??接下來介紹存儲(chǔ)器的組織形式。

?? 可以看到,這個(gè)存儲(chǔ)器分為三級,全局存儲(chǔ)器、局部存儲(chǔ)器和私有存儲(chǔ)器。全局存儲(chǔ)器對所有的工作項(xiàng)可見,但是訪問速度最慢;局部存儲(chǔ)器對工作組可見,訪問速度較高,超過告訴Cache,因此合理的使用Local,可以有效提升程序性能。除了局部內(nèi)存外,每個(gè)工作項(xiàng)可以申請私有存儲(chǔ),私有存儲(chǔ)一般對應(yīng)的是寄存器,因此訪問的速度最快。但是私有存儲(chǔ)有限,例如筆者使用的顯卡每個(gè)SIMD(以后的博客中會(huì)詳細(xì)介紹)含有256個(gè)用于邏輯運(yùn)算的寄存器。
??以上是OpenCL中關(guān)于計(jì)算和存儲(chǔ)的基本組織形式。

歡迎使用Markdown編輯器

你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學(xué)習(xí)如何使用Markdown編輯器, 可以仔細(xì)閱讀這篇文章,了解一下Markdown的基本語法知識(shí)。

新的改變

我們對Markdown編輯器進(jìn)行了一些功能拓展與語法支持,除了標(biāo)準(zhǔn)的Markdown編輯器功能,我們增加了如下幾點(diǎn)新功能,幫助你用它寫博客:

  • 全新的界面設(shè)計(jì) ,將會(huì)帶來全新的寫作體驗(yàn);
  • 在創(chuàng)作中心設(shè)置你喜愛的代碼高亮樣式,Markdown 將代碼片顯示選擇的高亮樣式 進(jìn)行展示;
  • 增加了 圖片拖拽 功能,你可以將本地的圖片直接拖拽到編輯區(qū)域直接展示;
  • 全新的 KaTeX數(shù)學(xué)公式 語法;
  • 增加了支持甘特圖的mermaid語法1 功能;
  • 增加了 多屏幕編輯 Markdown文章功能;
  • 增加了 焦點(diǎn)寫作模式、預(yù)覽模式、簡潔寫作模式、左右區(qū)域同步滾輪設(shè)置 等功能,功能按鈕位于編輯區(qū)域與預(yù)覽區(qū)域中間;
  • 增加了 檢查列表 功能。
  • 功能快捷鍵

    撤銷:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜體:Ctrl/Command + I
    標(biāo)題: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

    合理的創(chuàng)建標(biāo)題,有助于目錄的生成

    直接輸入1次#,并按下space后,將生成1級標(biāo)題。
    輸入2次#,并按下space后,將生成2級標(biāo)題。
    以此類推,我們支持6級標(biāo)題。有助于使用TOC語法后生成一個(gè)完美的目錄。

    如何改變文本的樣式

    強(qiáng)調(diào)文本 強(qiáng)調(diào)文本

    加粗文本 加粗文本

    標(biāo)記文本

    刪除文本

    引用文本

    H2O is是液體。

    210 運(yùn)算結(jié)果是 1024.

    插入鏈接與圖片

    鏈接: link.

    圖片:

    帶尺寸的圖片:

    當(dāng)然,我們?yōu)榱俗層脩舾颖憬?#xff0c;我們增加了圖片拖拽功能。

    如何插入一段漂亮的代碼片

    去博客設(shè)置頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的 代碼片.

    // An highlighted block var foo = 'bar';

    生成一個(gè)適合你的列表

    • 項(xiàng)目
      • 項(xiàng)目
        • 項(xiàng)目
  • 項(xiàng)目1
  • 項(xiàng)目2
  • 項(xiàng)目3
    • 計(jì)劃任務(wù)
    • 完成任務(wù)

    創(chuàng)建一個(gè)表格

    一個(gè)簡單的表格是這么創(chuàng)建的:

    項(xiàng)目Value
    電腦$1600
    手機(jī)$12
    導(dǎo)管$1

    設(shè)定內(nèi)容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants將ASCII標(biāo)點(diǎn)字符轉(zhuǎn)換為“智能”印刷標(biāo)點(diǎn)HTML實(shí)體。例如:

    TYPEASCIIHTML
    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

    創(chuàng)建一個(gè)自定義列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何創(chuàng)建一個(gè)注腳

    一個(gè)具有注腳的文本。2

    注釋也是必不可少的

    Markdown將文本轉(zhuǎn)換為 HTML。

    KaTeX數(shù)學(xué)公式

    您可以使用渲染LaTeX數(shù)學(xué)表達(dá)式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n ? 1 ) ! ? n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n?1)!?nN 是通過歐拉積分

    Γ ( 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.

    你可以找到更多關(guān)于的信息 LaTeX 數(shù)學(xué)表達(dá)式here.

    新的甘特圖功能,豐富你的文章

    Mon 06 Mon 13 Mon 20 已完成 進(jìn)行中 計(jì)劃一 計(jì)劃二 現(xiàn)有任務(wù) Adding GANTT diagram functionality to mermaid
    • 關(guān)于 甘特圖 語法,參考 這兒,

    UML 圖表

    可以使用UML圖表進(jìn)行渲染。 Mermaid. 例如下面產(chǎn)生的一個(gè)序列圖::

    張三 李四 王五 你好!李四, 最近怎么樣? 你最近怎么樣,王五? 我很好,謝謝! 我很好,謝謝! 李四想了很長時(shí)間, 文字太長了 不適合放在一行. 打量著王五... 很好... 王五, 你怎么樣? 張三 李四 王五

    這將產(chǎn)生一個(gè)流程圖。:

    鏈接 長方形 圓 圓角長方形 菱形
    • 關(guān)于 Mermaid 語法,參考 這兒,

    FLowchart流程圖

    我們依舊會(huì)支持flowchart的流程圖:

    Created with Rapha?l 2.2.0 開始 我的操作 確認(rèn)? 結(jié)束 yes no
    • 關(guān)于 Flowchart流程圖 語法,參考 這兒.

    導(dǎo)出與導(dǎo)入

    導(dǎo)出

    如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當(dāng)你完成了一篇文章的寫作, 在上方工具欄找到 文章導(dǎo)出 ,生成一個(gè).md文件或者.html文件進(jìn)行本地保存。

    導(dǎo)入

    如果你想加載一篇你寫過的.md文件或者.html文件,在上方工具欄可以選擇導(dǎo)入功能進(jìn)行對應(yīng)擴(kuò)展名的文件導(dǎo)入,
    繼續(xù)你的創(chuàng)作。


  • mermaid語法說明 ??

  • 注腳的解釋 ??

  • 總結(jié)

    以上是生活随笔為你收集整理的OpenCL设备存储形式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。