0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通用計(jì)算以及OpenCL究竟是什么?

e9Zb_gh_8734352 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-07-30 09:17 ? 次閱讀

OpenCL是當(dāng)前一個(gè)通用的由很多公司和組織共同發(fā)起的多CPU\GPU\其他芯片 異構(gòu)計(jì)算(heterogeneous)的標(biāo)準(zhǔn),它是跨平臺(tái)的。旨在充分利用GPU或者FPGA強(qiáng)大的并行計(jì)算能力與CPU進(jìn)行協(xié)同工作,更高效的利用硬件高效的完成大規(guī)模的(尤其是并行度高的)計(jì)算。

01

異構(gòu)計(jì)算、GPGPU與OpenCL

利用GPU對(duì)圖像渲染進(jìn)行加速的技術(shù)非常成熟,但是GPU的芯片結(jié)構(gòu)擅長(zhǎng)大規(guī)模的并行計(jì)算,CPU則擅長(zhǎng)邏輯和流程控制,為了不局限于圖像渲染,人們希望將這種計(jì)算能力擴(kuò)展到更多領(lǐng)域,所以這也被稱為GPGPU(即通用處計(jì)算處理的GPU)。

通俗來講,CPU并不適合計(jì)算,它是多指令單數(shù)據(jù)流(MISD)的體系結(jié)構(gòu),更加擅長(zhǎng)的是做邏輯控制,而數(shù)據(jù)處理基本是單流水線的,所以我們的代碼for(i=0;...;i++)在CPU上要重復(fù)迭代的跑很多遍,但是在GPU上則不是這樣,GPU是典型的單指令多數(shù)據(jù)(SIMD)的體系結(jié)構(gòu),它不擅長(zhǎng)邏輯控制,但是天生的向量計(jì)算機(jī),對(duì)于for(i=0;...;i++)這樣的代碼有時(shí)只需要跑一遍,所以圖形世界中那么多的頂點(diǎn)、片段才能快速、并行的在顯卡中渲染處理。

另外,GPU的晶體管可以到幾十億個(gè),而CPU通常只有幾億個(gè).

如上圖是NVidia Femi100的結(jié)構(gòu),它有著大量的并行計(jì)算單元。

所以人們就想如何將更多的計(jì)算代碼搬到GPU上,讓他不只做rendering,而CPU只負(fù)責(zé)邏輯控制,這種一個(gè)CPU(控制單元)+幾個(gè)GPU(有時(shí)可能再加幾個(gè)CPU)(計(jì)算單元)的架構(gòu)就是所謂的異構(gòu)編程(heterogeneous),在這里面的GPU就是GPGPU。異構(gòu)編程的前景和效率是非常振奮人心的,在很多領(lǐng)域,尤其是高并行度的計(jì)算中,效率提升的數(shù)量級(jí)不是幾倍,而是百倍千倍。

NVIDIA在很早就推出了利用其顯卡的GPGPU計(jì)算 CUDA架構(gòu),當(dāng)時(shí)的影響是很大的,將很多計(jì)算工作(科學(xué)計(jì)算、圖像渲染、游戲)的問題提高了幾個(gè)數(shù)量級(jí)的效率,CUDA是NVDIA主力推的通用計(jì)算架構(gòu),但是CUDA最大的局限就是它只能使用Nvidia自的顯卡,對(duì)于廣大的AMD卡用戶鞭長(zhǎng)莫及。

OpenCL則在之后應(yīng)運(yùn)而生,它由幾大主流芯片商、操作系統(tǒng)、軟件開發(fā)者、學(xué)術(shù)機(jī)構(gòu)、中間件提供者等公司聯(lián)合發(fā)起,它最初由Apple提出發(fā)起標(biāo)準(zhǔn),隨后Khronos Group成立工作組,協(xié)調(diào)這些公司共同維護(hù)這套通用的計(jì)算語言。Khronos Group聽起來比較熟悉吧,圖像繪制領(lǐng)域著名的軟硬件接口API規(guī)范著名的OpenGL也是這個(gè)組織維護(hù)的,其實(shí)他們還維護(hù)了很多多媒體領(lǐng)域的規(guī)范,可能也是類似于Open***起名的(所以剛聽到OpenCL的時(shí)候就在想它與OpenGl有啥關(guān)系),OpenCl沒有一個(gè)特定的SDK,Khronos Group只是指定標(biāo)準(zhǔn)(你可以理解為他們定義頭文件),而具體的實(shí)現(xiàn)則是由不同參與公司來做,這樣你會(huì)發(fā)現(xiàn)NVDIA將OpenCL做了實(shí)現(xiàn)后集成到它的CUDA SDK中,而AMD則將其實(shí)現(xiàn)后放在所謂是AMD APP (Accelerated Paral Processing)SDK中,而Intel也做了實(shí)現(xiàn),所以目前的主流CPU和GPU都支持OpenCL架構(gòu),雖然不同公司做了不同的SDK,但是他們都遵照同樣的OpenCL規(guī)范,也就是說原則上如果你用標(biāo)準(zhǔn)OpenCl頭中定義的那些接口的話,使用NVIDIA的SDK編的程序可以跑在AMD的顯卡上的。但是不同的SDK會(huì)有針對(duì)他們芯片的特定擴(kuò)展,這點(diǎn)類似于標(biāo)磚OpenGL庫和GL庫擴(kuò)展的關(guān)系。

OpenGL的出現(xiàn)使得AMD在GPGPU領(lǐng)域終于迎頭趕上的NVIDIA,但是NVIDIA雖為OpenCL的一員,但是他們似乎更加看重自己的獨(dú)門武器CUDA,所以N家對(duì)OpenCL實(shí)現(xiàn)的擴(kuò)展也要比AMD少,AMD由于同時(shí)做CPU和GPU,還有他們的APU,似乎對(duì)OpenCL更來勁一些。

02

OpenCL的誕生

OpenCL也是通過在GPU上寫代碼來加速,只不過他把CPU、GPU、其他什么芯片給統(tǒng)一封裝了起來,更高了一層,對(duì)開發(fā)者也更友好。

其實(shí)最開始顯卡是不存在的,最早的圖形處理是放在CPU上,后來發(fā)現(xiàn)可以再主板上放一個(gè)單獨(dú)的芯片來加速圖形繪制,那時(shí)還叫圖像處理單元,直到NVIDIA把這東西做強(qiáng)做大,并且第一給它改了個(gè)NB的稱呼,叫做GPU,也叫圖像處理器,后來GPU就以比CPU高幾倍的速度增長(zhǎng)性能。

開始的時(shí)候GPU不能編程,也叫固定管線的,就是把數(shù)據(jù)按照固定的通路走完和CPU同樣作為計(jì)算處理器,順理成章就出來了可編程的GPU,但是那時(shí)候想在GPU上編程可不是容易的事,你只能使用GPU匯編來寫GPU程序,GPU匯編?聽起來就是很高級(jí)的玩意兒,所以那時(shí)使用GPU繪制很多特殊效果的技能只掌握在少數(shù)圖形工程師身上,這種方式叫可編程管線。

很快這種桎桍被打破,GPU上的高級(jí)編程語言誕生,在當(dāng)時(shí)更先進(jìn)的一些顯卡上,像C一樣的高級(jí)語言可以使程序員更加容易的往GPU寫代碼,這些語言代表有nvidia和微軟一起創(chuàng)作的CG,微軟的HLSL,openGl的GLSL等等,現(xiàn)在它們也通常被稱為高級(jí)著色語言(Shading Language),這些shader目前已經(jīng)被廣泛應(yīng)用于我們的各種游戲中。

在使用shading language的過程中,一些科研人員發(fā)現(xiàn)很多非圖形計(jì)算的問題(如數(shù)學(xué)、物理領(lǐng)域的并行計(jì)算)可以偽裝成圖形問題利用Shading Language實(shí)現(xiàn)在GPU上計(jì)算,而這結(jié)果是在CPU上跑速度的N倍,人們又有了新的想法,想著利用GPU這種性能去解決所有大量并行計(jì)算的問題(不只圖形領(lǐng)域),這也叫做通用處理的GPU(GPGPU),很多人嘗試這樣做了,一段時(shí)間很多論文在寫怎樣怎樣利用GPU算了哪個(gè)東東。。。但是這種工作都是偽裝成圖形處理的形式做的,還沒有一種天然的語言來讓我們?cè)贕PU上做通用計(jì)算。這時(shí)又是NVIDIA帶來了革新,09年前后推出的GUDA架構(gòu),可以讓開發(fā)者在他們的顯卡上用高級(jí)語言編寫通用計(jì)算程序,一時(shí)CUDA熱了起來,直到現(xiàn)在N卡都印著大大的CUDA logo,不過它的局限就是硬件的限制。

OpenCL則突破了硬件的壁壘,試圖在所有支持的硬件上搭建起通用計(jì)算的協(xié)同平臺(tái),不管你是cpu還是gpu通通一視同仁,都能進(jìn)行計(jì)算,可以說OpenCL的意義在于模糊了主板上那兩種重要處理器的界限,并使在GPU上跑代碼變得更容易。

01

OpenCL架構(gòu)

上面說的都是關(guān)于通用計(jì)算以及OpenCL是什么,下面就提綱挈領(lǐng)的把OpenCL的架構(gòu)總結(jié)一下:以下是OpenCL硬件層的抽象

它是一個(gè)Host(控制處理單元,通常由一個(gè)CPU擔(dān)任)和一堆Computer Device(計(jì)算處理單元,通常由一些GPU、CPU其他支持的芯片擔(dān)任),其中Compute Device切分成很多Processing Element(這是獨(dú)立參與單數(shù)據(jù)計(jì)算的最小單元,這個(gè)不同硬件實(shí)現(xiàn)都不一樣,如GPU可能就是其中一個(gè)Processor,而CPU可能是一個(gè)Core),其中很多個(gè)Processing Element可以組成組為一個(gè)Computer Unit,一個(gè)Unit內(nèi)的element之間可以方便的共享memory,也只有一個(gè)Unit內(nèi)的element可以實(shí)現(xiàn)同步等操作

02

內(nèi)存架構(gòu)

其中Host有自己的內(nèi)存,而在compute Device上則比較復(fù)雜,首先有個(gè)常量?jī)?nèi)存,是所有人能用的,通常也是訪問最快的但是最稀少的,然后每個(gè)element有自己的memory,這是private的,一個(gè)組內(nèi)的element有他們共用的一個(gè)local memery。仔細(xì)分析,這是一個(gè)高效優(yōu)雅的內(nèi)存組織方式。數(shù)據(jù)可以沿著Host-》gloabal-》local-》private的通道流動(dòng)(這其中可能跨越了很多個(gè)硬件)

03

軟件層面的組成

這些在SDK中都有對(duì)應(yīng)的數(shù)據(jù)類型

  1. setup相關(guān):

    Device:對(duì)應(yīng)一個(gè)硬件(標(biāo)準(zhǔn)中特別說明多core的CPU是一個(gè)整個(gè)Device)

    Context:環(huán)境上下文,一個(gè)Context包含幾個(gè)device(單個(gè)Cpu或GPU),一個(gè)Context就是這些device的一個(gè)聯(lián)系紐帶,只有在一個(gè)Context上的那些Device才能彼此交流工作,你的機(jī)器上可以同時(shí)存在很多Context。你可以用一個(gè)CPu創(chuàng)建context,也可以用一個(gè)CPU和一個(gè)GPU創(chuàng)建一個(gè)。

    Command queue:這是個(gè)給每個(gè)Device提交的指令序列

  2. 內(nèi)存相關(guān):

    Buffers:這個(gè)好理解,一塊內(nèi)存

    Images:畢竟并行計(jì)算大多數(shù)的應(yīng)用前景在圖形圖像上,所以原生帶有幾個(gè)類型,表示各種維度的圖像。

    gpu代碼執(zhí)行相關(guān):

    Program:這是所有代碼的集合,可能包含Kernel是和其他庫,OpenCl是一個(gè)動(dòng)態(tài)編譯的語言,代碼編譯后生成一個(gè)中間文件(可實(shí)現(xiàn)為虛擬機(jī)代碼或者匯編代碼,看不同實(shí)現(xiàn)),在使用時(shí)連接進(jìn)入程序讀入處理器。

    Kernel:這是在element跑的核函數(shù)及其參數(shù)組和,如果把計(jì)算設(shè)備看做好多人同時(shí)為你做一個(gè)事情,那么Kernel就是他們每個(gè)人做的那個(gè)事情,這個(gè)事情每個(gè)人都是同樣的做,但是參數(shù)可能是不同的,這就是所謂的單指令多數(shù)據(jù)體系。

    WorkI tem:這就是代表硬件上的一個(gè)Processing Element,最基本的計(jì)算單元

  3. 同步相關(guān):

    Events:在這樣一個(gè)分布式計(jì)算的環(huán)境中,不同單元之間的同步是一個(gè)大問題,event是用來同步的

他們的關(guān)系如下圖

上面就是OpenCL的入門介紹, 在游戲領(lǐng)域,OpenCL已經(jīng)有了很多成功的實(shí)踐,好像EA的F1就已經(jīng)應(yīng)用了OpenCL,還有一些做海洋的lib應(yīng)用OpenCL(海面水波的FFT運(yùn)算在過去是非常慢的),另外還有的庫干脆利用OpenCL去直接修改現(xiàn)有的C代碼,加速for循環(huán)等,甚至還有OpenCl版本的C++ STL,叫thrust,所以我覺得OpenCL可能會(huì)真正的給我們帶來些什么

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    27

    文章

    4602

    瀏覽量

    128189
  • OpenCL
    +關(guān)注

    關(guān)注

    2

    文章

    48

    瀏覽量

    33215
  • 異構(gòu)計(jì)算
    +關(guān)注

    關(guān)注

    2

    文章

    98

    瀏覽量

    16223

原文標(biāo)題:異構(gòu)計(jì)算以及OpenCL介紹

文章出處:【微信號(hào):gh_873435264fd4,微信公眾號(hào):FPGA技術(shù)聯(lián)盟】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電感器線徑究竟是粗好還是細(xì)好

    電子發(fā)燒友網(wǎng)站提供《電感器線徑究竟是粗好還是細(xì)好.docx》資料免費(fèi)下載
    發(fā)表于 09-20 11:25 ?0次下載

    tas5756m使用GPIO口加內(nèi)部PLL產(chǎn)生MCLK的方法究竟是怎么樣的?

    tas5756m使用GPIO口加內(nèi)部PLL產(chǎn)生MCLK的方法究竟是怎么樣的?
    發(fā)表于 08-19 06:06

    請(qǐng)問cH340G的TX引腳電平究竟是3v還是5v?

    用CD34G來實(shí)現(xiàn)usb轉(zhuǎn)串口的時(shí)候,直接用usb口的5v作為電源電壓,它的tx引腳輸出的高電平究竟是5v還是3v,我實(shí)測(cè)是3v,但網(wǎng)上有的人是5v,想進(jìn)一步得到大家的確認(rèn)。
    發(fā)表于 05-14 08:15

    MPLS究竟是什么?

    由于運(yùn)行 MPLS 的服務(wù)提供商只查看數(shù)據(jù)包上的標(biāo)簽,而不是 IP 本身,這使得服務(wù)提供商能夠使用 MPLS 為此類客戶提供 VPN 服務(wù)。
    發(fā)表于 04-26 16:09 ?260次閱讀
    MPLS<b class='flag-5'>究竟是</b>什么?

    工業(yè)物聯(lián)網(wǎng)究竟是什么呢?它又有哪些作用呢?

    隨著科技的快速發(fā)展,物聯(lián)網(wǎng)技術(shù)已經(jīng)逐漸滲透到我們生活的各個(gè)角落,而 工業(yè)物聯(lián)網(wǎng)(IIoT) 更是引領(lǐng)著工業(yè)領(lǐng)域的數(shù)字化轉(zhuǎn)型。那么,工業(yè)物聯(lián)網(wǎng)究竟是什么呢?它又有哪些作用呢?本文將對(duì)此進(jìn)行深度解析
    的頭像 發(fā)表于 04-22 15:26 ?264次閱讀

    STM32擦除后數(shù)據(jù)究竟是0x00還是0xff ?

    STM32擦除后數(shù)據(jù)究竟是0x00還是0xff ,百度查了許多發(fā)現(xiàn)大多數(shù)都是0xff的多,都說SD卡(TF)儲(chǔ)存介質(zhì)是Flash 所以擦除后為0xff,但是我遇到了讀出來的數(shù)據(jù)是0x00的情況,為什么呢
    發(fā)表于 04-18 07:59

    MOSFET的柵源振蕩究竟是怎么來的?柵源振蕩的危害什么?如何抑制

    MOSFET的柵源振蕩究竟是怎么來的呢?柵源振蕩的危害什么?如何抑制或緩解柵源振蕩的現(xiàn)象呢? MOSFET(金屬-氧化物-半導(dǎo)體場(chǎng)效應(yīng)晶體管)的柵源振蕩是指在工作過程中,出現(xiàn)的柵極與源極之間產(chǎn)生
    的頭像 發(fā)表于 03-27 15:33 ?1205次閱讀

    【量子計(jì)算機(jī)重構(gòu)未來 | 閱讀體驗(yàn)】+量子計(jì)算機(jī)的原理究竟是什么以及有哪些應(yīng)用

    本書內(nèi)容從目錄可以看出本書主要是兩部分內(nèi)容,一部分介紹量子計(jì)算機(jī)原理,一部分介紹其應(yīng)用。 其實(shí)個(gè)人也是抱著對(duì)這兩個(gè)問題的興趣來看的。 究竟什么是量子計(jì)算機(jī)相信很多讀者都是抱著這個(gè)疑問
    發(fā)表于 03-11 12:50

    吸塵器究竟是如何替你“吃灰”的【其利天下技術(shù)】

    如今,吸塵器已成為大多數(shù)人居家必備的小家電產(chǎn)品,那么說起吸塵器,你對(duì)吸塵器有了解多少呢?不知道大家知不知道它的原理是什么?今天我們就來說一說吸塵器究竟是如何替你“吃灰”的。
    的頭像 發(fā)表于 03-07 21:17 ?751次閱讀
    吸塵器<b class='flag-5'>究竟是</b>如何替你“吃灰”的【其利天下技術(shù)】

    “其貌不揚(yáng)”的共模電感究竟是如何做到抗干擾的呢?

    “其貌不揚(yáng)”的共模電感究竟是如何做到抗干擾的呢? 共模電感是一種用于濾除電子設(shè)備中的共模噪聲的重要元件,其主要作用是提供阻抗來濾除共模干擾信號(hào)。盡管外觀看起來“其貌不揚(yáng)”,但共模電感通過其特殊
    的頭像 發(fā)表于 01-11 16:27 ?581次閱讀

    同步電機(jī)的轉(zhuǎn)數(shù)同步究竟是與什么同步???

    同步電機(jī)的轉(zhuǎn)數(shù)同步究竟是與什么同步啊? 所有的同步電機(jī)的轉(zhuǎn)數(shù)都一樣嗎?還是與電機(jī)的極對(duì)數(shù)有關(guān)系呢?
    發(fā)表于 12-19 06:44

    半導(dǎo)體內(nèi)部電荷運(yùn)動(dòng)的機(jī)制究竟是什么呢?

    半導(dǎo)體內(nèi)部電荷運(yùn)動(dòng)的機(jī)制究竟是什么呢? 半導(dǎo)體材料的內(nèi)部電荷運(yùn)動(dòng)機(jī)制是半導(dǎo)體物理學(xué)和固體物理學(xué)的重要研究領(lǐng)域之一。在這篇文章中,我們將詳細(xì)、真實(shí)地探討半導(dǎo)體內(nèi)部電荷運(yùn)動(dòng)的機(jī)制,從電子的能帶結(jié)構(gòu)到
    的頭像 發(fā)表于 11-30 11:28 ?550次閱讀

    快充手機(jī)為何突然充電速度減緩?究竟是什么原因?qū)е铝诉@種情況呢?

    快充手機(jī)為何突然充電速度減緩?究竟是什么原因?qū)е铝诉@種情況呢? 快充手機(jī)的充電速度減緩可能有以下幾個(gè)原因: 1. 電池老化:隨著使用時(shí)間的增長(zhǎng),電池容量會(huì)逐漸下降,因此充電速度也會(huì)減緩。這是一個(gè)
    的頭像 發(fā)表于 11-16 14:47 ?5304次閱讀

    一體成型貼片電感在使用中發(fā)熱究竟是否會(huì)影響運(yùn)行

    電子發(fā)燒友網(wǎng)站提供《一體成型貼片電感在使用中發(fā)熱究竟是否會(huì)影響運(yùn)行.docx》資料免費(fèi)下載
    發(fā)表于 11-13 16:28 ?1次下載

    OSPF究竟是如何規(guī)避路由環(huán)路的呢?

    OSPF究竟是如何規(guī)避路由環(huán)路的呢? OSPF(開放式最短路徑優(yōu)先)是一種內(nèi)部網(wǎng)關(guān)協(xié)議(IGP),用于在一個(gè)單一的自治系統(tǒng)(AS)內(nèi)進(jìn)行路由選擇,它是一種鏈路狀態(tài)協(xié)議(LSP)。在OSPF中,路由器
    的頭像 發(fā)表于 11-06 11:10 ?1545次閱讀