圖1:CPU 的工業(yè)類比
這些工人每人都能使用通用工具生產出幾乎任何產品。每位工人按順序使用不同的工具,將原材料制造為成品,一次生產一件產品。根據(jù)任務的性質,這種串行生產流程可能用到大量步驟。這些車間基本(不考慮緩存的情況下)彼此獨立,工人能全身心地完成不同任務,不必擔心干擾或協(xié)調問題。盡管CPU 十分靈活,但它的底層硬件是固定的。CPU 仍然在基本的馮諾依曼架構(或者更確切地說,存儲程序計算機)上運行。數(shù)據(jù)從存儲器讀取到處理器進行運算,然后寫回到存儲器?;旧厦總€ CPU 都以串行方式運行,一次一個指令。同時架構以算術邏輯單元 (ALU) 為中心,每次運算都需要將數(shù)據(jù)輸入到 ALU 并從 ALU 輸出數(shù)據(jù)。
CPU的工業(yè)類比
GPU 也可以用車間和工人類比,但它們的數(shù)量要大得多,并且工人的專業(yè)化程度也要高很多,如圖2所示。
圖 2: GPU 的工業(yè)類比
GPU 工人只能使用特定的工具,每人能完成的任務種類要少得多,但他們完成任務的效率非常高。GPU 工人在重復做相同的少量任務時效率最高,尤其是當他們全體同時做同一件事情時。GPU 解決了 CPU 的主要缺陷之一,即并行處理大量數(shù)據(jù)的能力。
雖然 GPU 比 CPU 擁有非常多的核,但 GPU 采用的依然是固定的硬件架構。GPU 的核仍然包含某種類型的馮諾依曼處理器。一條指令就能處理上千條或者更多數(shù)量的數(shù)據(jù),盡管通常必須對同時處理的每一條數(shù)據(jù)進行相同的運算。原子處理元在數(shù)據(jù)矢量上運算(非 CPU 情況下的數(shù)據(jù)點),但仍然是每個 ALU 執(zhí)行一條固定的指令。因此,用戶仍然需要通過固定的數(shù)據(jù)路徑,從存儲器將數(shù)據(jù)傳遞給這些處理單元。與 CPU 相似,GPU 也采用固定硬件構建,對所有的機器人應用而言,其基本架構和數(shù)據(jù)流都是固定不變的。
FPGA 的工業(yè)類比
如果說 CPU 和 GPU 是工人按照順序依次將輸入加工成輸出的車間,那么 FPGA 就是靈活的自適應工廠,能夠針對手中的具體任務定制創(chuàng)設裝配線和傳送帶(參見圖 3)。
圖 4: FPGA 的工業(yè)類比
這種靈活應變能力,意味著 FPGA 架構師可以先構建工廠、裝配線和工位,然后根據(jù)所需完成的任務對它們進行量身定制,而不是使用通用工具。這些工廠中的原材料由分配在裝配線上的工人小組逐步加工成成品。每名工人都重復地完成同樣的任務,同時半成品通過傳送帶在工人間進行傳遞。這樣能大幅提升生產力,并保證以最佳方式充分利用資源和電力。在這個類比中,工廠是 OpenCL 加速內核,裝配線是數(shù)據(jù)流流水線,工位是 OpenCL 計算功能。
ASIC的工業(yè)類比
與 FPGA 類似,ASIC 也建造工廠,但是 ASIC 中的工廠是最終形態(tài),不能改動(參見圖 4)。換言之,這些 ASIC 內部只有機器人,工廠內不存在人類認知。這些裝配線和傳送帶是固定的,不允許變更自動化流程。ASIC 的這種專用型固定架構賦予它們極高的能效,以及大批量規(guī)模化生產下的最低價格。但遺憾的是,ASIC 的開發(fā)通常需要耗時多年,而且不支持進行任何變更,這將會導致前期投入的資產很快跟不上未來生產力提升的變化。
圖 4: ASIC 的工業(yè)類比