? ? ? ?最近導(dǎo)師布置了了解“異構(gòu)計算”的任務(wù),以便于后續(xù)研究中實現(xiàn)圖像原始數(shù)據(jù)的快速處理,因此本文集的內(nèi)容是關(guān)于異構(gòu)計算學(xué)習(xí)的一個總結(jié),首先是異構(gòu)計算的初識。
1.異構(gòu)計算是什么?并行計算?異構(gòu)并行計算?
1.1異構(gòu)計算是什么
在了解異構(gòu)計算是什么之前,不妨先了解一下人工智能的三要素以及何為同構(gòu)計算。這樣就能體會出異構(gòu)計算為何產(chǎn)生,有何特點。
人工智能有三要素:算法,計算力,數(shù)據(jù)。同構(gòu)計算與異構(gòu)計算屬于算力的部分。
計算力歸根結(jié)底由底層芯片提供。按照計算芯片的組成方式,可以分成:
同構(gòu)計算:使用相同類型指令集和體系架構(gòu)的計算單元組成系統(tǒng)的計算方式。
異構(gòu)計算:使用不同類型指令集和體系架構(gòu)的計算單元組成系統(tǒng)的計算方式(用不同制程架構(gòu)、不同指令集、不同功能的硬件組合起來解決問題)。常見的計算單元類別包括CPU、GPU、DSP、ASIC、FPGA等。
引用知乎上的一個小例子,可更好的解釋概念:廚房異構(gòu)
例子中涉及的一些概念的解釋如下:
1)協(xié)處理器
協(xié)處理器,這是一種協(xié)助中央處理器完成其無法執(zhí)行或執(zhí)行效率、效果低下的處理工作而開發(fā)和應(yīng)用的處理器。這種中央處理器無法執(zhí)行的工作有很多,比如設(shè)備間的信號傳輸、接入設(shè)備的管理等;而執(zhí)行效率、效果低下的有圖形處理、聲頻處理等。為了進行這些處理,各種輔助處理器就誕生了。需要說明的是,由于現(xiàn)在的計算機中,整數(shù)運算器與浮點運算器已經(jīng)集成在一起,因此浮點處理器已經(jīng)不算是輔助處理器。而內(nèi)建于CPU中的協(xié)處理器,同樣不算是輔助處理器,除非它是獨立存在。
2)指令集
指令集,就是CPU中用來計算和控制計算機系統(tǒng)的一套指令的集合,而每一種新型的CPU在設(shè)計時就規(guī)定了一系列與其他硬件電路相配合的指令系統(tǒng)。而指令集的先進與否,也關(guān)系到CPU的性能發(fā)揮,它也是CPU性能體現(xiàn)的一個重要標(biāo)志。每款CPU在設(shè)計時就規(guī)定了一系列與其硬件電路相配合的指令系統(tǒng)。指令的強弱也是CPU的重要指標(biāo),指令集是提高微處理器效率的最有效的工具之一。從現(xiàn)階段的主流體系結(jié)構(gòu)講,指令集可分為復(fù)雜指令集和精簡指令集兩部分。
3)ASIC(特殊訂制集成電路)與FPGA(現(xiàn)場可編程門級列陣)
4)DSP芯片
dsp芯片是指能夠?qū)崿F(xiàn)數(shù)字信號處理技術(shù)的芯片,其中的dsp就是指數(shù)字信號處理技術(shù)。dsp芯片的內(nèi)部采用程序和數(shù)據(jù)分開的哈佛結(jié)構(gòu),具有專門的硬件乘法器,廣泛采用流水線操作,提供特殊的dsp指令,可以用來快速地實現(xiàn)各種數(shù)字信號處理算法。
DSP和CPU都是微處理器,但DSP是CPU發(fā)展的分支,DSP是專用的信息處理器,內(nèi)部的程序是針對不同的機器和環(huán)境進行特別設(shè)計的。CPU是多功能的處理器,強調(diào)的是多功能,適應(yīng)很多不同的環(huán)境和任務(wù),DSP可以做CPU的某些功能的補充加強,但不能代替CPU,CPU也無法替代DSP的功能。
5)X-PU之間的區(qū)別(CPU、GPU、TPU、NPU、BPU、DPU)
參考文章地址:https://www.cnblogs.com/missidiot/p/9869275.html
有關(guān)于CPU的一些補充如下:
“cpu與cache.主存和外存的關(guān)系”可參考:https://wenwen.sogou.com/z/q106909635.htm
“寄存器和存儲器”可參考:https://blog.csdn.net/menshu1892/article/details/79912090
有關(guān)于NPU(Neural network Processing Unit? 神經(jīng)網(wǎng)絡(luò)處理器)的一些補充如下:
參考文章《NPU的發(fā)展概況》----https://blog.csdn.net/CHAO_bismarck/article/details/106651814
6)計算機硬件關(guān)系圖??

1.2并行計算
參考文章鏈接:
https://blog.csdn.net/qq_25985027/article/details/103351550
https://blog.csdn.net/wm_1991/article/details/50257269
https://blog.csdn.net/Hyo555/article/details/102584996
了解并行計算之間先了解一下何為“串行計算”。
1.2.1串行計算
串行的意思是A和B兩個任務(wù)運行在一個CPU線程上,在A任務(wù)執(zhí)行完之前不可以執(zhí)行B。即,在整個程序的運行過程中,僅存在一個運行上下文,即一個調(diào)用棧一個堆。程序會按順序執(zhí)行每個指令。
串行計算即不將任務(wù)進行拆分,一個任務(wù)占用一塊處理資源,如下圖:

1.2.2并行計算
并行性(并行)指兩個或兩個以上事件或活動在同一時刻發(fā)生。在多道程序環(huán)境下,并行性使多個程序同一時刻可在不同CPU上同時執(zhí)行。比如,A和B兩個任務(wù)可以同時運行在不同的CPU線程上,效率較高,但受限于CPU線程數(shù),如果任務(wù)數(shù)量超過了CPU線程數(shù),那么每個線程上的任務(wù)仍然是順序執(zhí)行的。
(核心和線程知識見:http://www.360doc.com/content/19/0819/05/5816007_855764689.shtml)
并行計算或稱平行計算是相對于串行計算來說的。并行計算(Parallel Computing)是指同時使用多種計算資源解決計算問題的過程。為執(zhí)行并行計算,計算資源應(yīng)包括一臺配有多處理機(并行處理)的計算機、一個與網(wǎng)絡(luò)相連的計算機專有編號,或者兩者結(jié)合使用。并行計算的主要目的是快速解決大型且復(fù)雜的計算問題。
并行計算可以劃分成時間并行和空間并行。時間并行就是流水線技術(shù)(可參考:《計算機體系結(jié)構(gòu)——流水線技術(shù)(Pipelining)》),空間并行使用多個處理器執(zhí)行并發(fā)計算。目前以研究空間并行為主。從空間 并行的角度來說,并行計算將一個大任務(wù)分割成多個子任務(wù),每個子任務(wù)占用一定處理資源。并行計算中不同子任務(wù)占用的不同的處理資源來源于同一塊大的處理資源。?換一個說法,就是將一塊大的處理資源分為幾塊小的處理資源,將一個大任務(wù)分割成多個子任務(wù),用這些小的處理資源來單獨處理這些子任務(wù)。?并行計算中各個子任務(wù)之間是有很大的聯(lián)系的,每個子任務(wù)都是必要的,其結(jié)果相互影響。

以程序和算法設(shè)計人員的角度看,并行計算又可分為數(shù)據(jù)并行和任務(wù)并行。數(shù)據(jù)并行把大的任務(wù)化解成若干個相同的子任務(wù),處理起來比任務(wù)并行簡單。
空間上的并行導(dǎo)致兩類并行機的產(chǎn)生,按照Michael Flynn(費林分類法)的說法分為單指令流多數(shù)據(jù)流(SIMD)和多指令流多數(shù)據(jù)流(MIMD),而常用的串行機也稱為單指令流單數(shù)據(jù)流(SISD)。MIMD類的機器又可分為常見的五類:并行向量處理機(PVP)、對稱多處理機(SMP)、大規(guī)模并行處理機(MPP)、工作站機群(COW)、分布式共享存儲處理(DSM)。
其他關(guān)于分布計算、網(wǎng)絡(luò)計算和云計算的知識見文章:《簡單理解串行計算、并行計算、分布式計算、網(wǎng)格計算與云計算》
1.3異構(gòu)并行計算
異構(gòu)并行計算包含兩個方面的內(nèi)容:異構(gòu)和并行。異構(gòu)是指:計算單元由不同的多種處理器組成,如X86CPU+GPU、ARM?CPU+GPU、X86?CPU+FPGA、ARM?CPU+DSP等。并行是指:要發(fā)揮異構(gòu)硬件平臺的全部性能必須要使用并行的編程方式。這通常包含兩個層次的內(nèi)容:
1)多個不同架構(gòu)的處理器同時計算,要發(fā)揮異構(gòu)系統(tǒng)中所有處理器的性能,可通過并行編程使每個處理器都參與運算,避免處理器閑置。相比于只讓某一種類型的處理器參與工作,這種方式提高了性能上限,簡單舉例來說,在X86?CPU+GPU平臺上,X86?CPU的計算能力為1TFLOPS,GPU的計算能力為4TFLOPS(floating point operations per second? 每秒所執(zhí)行的浮點運算次數(shù)),如果只使用GPU,那么最大可發(fā)揮的性能是4TFLOPS,而如果加上X86?CPU,則最大可發(fā)揮的性能是5TFLOPS。
2)每個處理器都是多核向量處理器,這要求使用并行編程以發(fā)揮每個處理器的計算能力。通常每個處理器包括多個核心,每個核心包含一個或多個長向量,如AMD?GCN?GPU中就包含數(shù)量不等的核心,每個核心包含4個向量,每個向量能夠同時處理16個4字節(jié)長度的數(shù)據(jù)。如果沒能很好地并行,則可能不能完美地發(fā)揮多核和向量化的性能。
本內(nèi)容參考書籍《OpenCL異構(gòu)并行計算原理、機制與優(yōu)化實踐》,這是本非常好的異構(gòu)并行計算學(xué)習(xí)書籍,強烈推薦!!該書的PDF的下載鏈接為:https://www.jb51.net/books/526130.html
如果對異構(gòu)并行計算很感興趣,想知道應(yīng)具備哪些技能與知識可參考文章:如何成為一名異構(gòu)并行計算工程師
另外的可參考文章有:CPU兩大架構(gòu)X86 和 ARM? ? ? ? 異構(gòu)計算綜述
2.華為異構(gòu)計算方案
華為主要采取的cpu+npu的異構(gòu)計算架構(gòu),稱為CANN。華為云官網(wǎng)公布了一系列詳盡的異構(gòu)計算資料,大家可自行登錄查看
CANN異構(gòu)計算架構(gòu)