自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從零開始手搓GPU,照著英偉達(dá)CUDA來,只用兩個(gè)星期

人工智能 新聞
近日,美國一家 web3 開發(fā)公司的創(chuàng)始工程師之一 Adam Majmudar 分享了他「手搓 GPU」成功的經(jīng)歷,引發(fā)了網(wǎng)友們的一大片點(diǎn)贊。

「我花兩周時(shí)間零經(jīng)驗(yàn)從頭開始構(gòu)建 GPU,這可比想象的要難多了。」

圖片

總有人說老黃的芯片供不應(yīng)求,大家恨不得去手搓 GPU,現(xiàn)在真的有人試了。


近日,美國一家 web3 開發(fā)公司的創(chuàng)始工程師之一 Adam Majmudar 分享了他「手搓 GPU」成功的經(jīng)歷,引發(fā)了網(wǎng)友們的一大片點(diǎn)贊。令人驚訝的是,他僅用兩周時(shí)間就完成了這一腦力壯舉。在 Twitter/X 的主題帖子中,Majmudar 進(jìn)行了直播,一步步帶我們回顧了整個(gè)過程。


圖片

自造 GPU 的實(shí)踐當(dāng)然也被公開在 GitHub 上,現(xiàn)在這個(gè)項(xiàng)目已有 5300 的 Star 量了。

圖片

項(xiàng)目鏈接:https://github.com/adam-maj/tiny-gpu

需要明確的是,該項(xiàng)目目前的節(jié)點(diǎn)是在 Verilog 中的芯片布局,最終通過 OpenLane EDA 軟件進(jìn)行了驗(yàn)證。在這之后,GPU 還將通過 Tiny Tapeout 7 提交流片,因此注定會(huì)在未來幾個(gè)月內(nèi)成為物理形態(tài)的芯片。

圖片

Majmudar 詳細(xì)列出了設(shè)計(jì) GPU 所完成的任務(wù)流程。顯然,作為一個(gè)「從頭開始」的項(xiàng)目,在試探性邁出第一步之前就需要進(jìn)行大量的研究和思考。由于專有技術(shù)的主導(dǎo)地位,GPU 是一個(gè)相對復(fù)雜的研究領(lǐng)域,想想就難,實(shí)踐起來更難。

手搓 GPU 要分幾步?

實(shí)際上對于 Majmudar 來說,操作比這個(gè)步驟還要多,因?yàn)樗娴臎]啥技術(shù)基礎(chǔ),是從學(xué)習(xí) GPU 架構(gòu)的基礎(chǔ)知識(shí)開始的。

他首先開始嘗試通過學(xué)習(xí)英偉達(dá)的 CUDA 框架來理解 GPU 軟件模式,進(jìn)而理解了用于編寫 GPU 程序(稱為內(nèi)核)的相同指令多數(shù)據(jù) (SIMD) 編程模式。

有了這些背景,Majmudar 開始深入學(xué)習(xí) GPU 的核心元素:從全局內(nèi)存、計(jì)算核心、分層緩存、內(nèi)存控制器到程序調(diào)度。

然后在每個(gè)計(jì)算核心中,我們還要了解其中的主要單元:包括寄存器、本地 / 共享內(nèi)存、加載存儲(chǔ)單元 (LSU) 、計(jì)算單元 、調(diào)度程序、獲取器和解碼器。

圖片

好了,你已經(jīng)是一個(gè)了解了現(xiàn)代 GPU 架構(gòu)的人了,下面讓我們來手搓一塊 GPU 吧。

此處 Majmudar 表示,由于復(fù)雜性如此之高,我們必須將 GPU 簡化到新手能夠設(shè)計(jì)的水平,否則項(xiàng)目就工期爆炸了。

接下來就是創(chuàng)建一個(gè)自己的 GPU 架構(gòu)。我們的目標(biāo)是創(chuàng)造一個(gè)最小的 GPU 來突出 GPU 的核心概念,并消除不必要的復(fù)雜性,以便其他人可以更輕松地了解 GPU。

Majmudar 表示,設(shè)計(jì)自己的 GPU 架構(gòu)是一項(xiàng)令人難以置信的實(shí)踐。

他一邊學(xué)習(xí)一邊操作,隨后決定在設(shè)計(jì)中強(qiáng)調(diào)以下幾點(diǎn): 

  • 并行化 - 在硬件中實(shí)現(xiàn) SIMD 模式;
  • 內(nèi)存訪問 - 觀察 GPU 如何應(yīng)對從緩慢且?guī)捰邢薜膬?nèi)存訪問大量數(shù)據(jù)的挑戰(zhàn);
  • 資源管理 - 最大限度提高資源利用率和效率。

通過對上述架構(gòu)的多次迭代,Majmudar 決定專注于通用并行計(jì)算 (GPGPU) 功能,面向機(jī)器學(xué)習(xí)(machine learning)的更廣泛用例。

設(shè)計(jì)稱得上緊跟時(shí)代。

這里的一切都是最簡單的形式。

第三步是為這塊 GPU 編寫自定義的匯編語言。

Majmudar 表示,其中一個(gè)最關(guān)鍵的因素是他 GPU 實(shí)際上可以執(zhí)行用 SIMD 編程模式編寫的內(nèi)核。為了實(shí)現(xiàn)這一點(diǎn),就必須為 GPU 設(shè)計(jì)自己的指令集架構(gòu)(ISA),以便用來編寫內(nèi)核。他制作了自己的 11 條小型指令 ISA,該 ISA 受到 LC4 ISA 的啟發(fā)。在這之后,他又編寫一些簡單的矩陣數(shù)學(xué)內(nèi)核作為概念證明。

這是 Adam Majmudar 提出的 ISA 的完整表格,其中包括每條指令的確切結(jié)構(gòu)。

接下來,Majmudar 編寫了兩個(gè)在其 GPU 上運(yùn)行的矩陣數(shù)學(xué)內(nèi)核。這些矩陣加法和乘法內(nèi)核將演示 GPU 的關(guān)鍵功能,并提供其在圖形和機(jī)器學(xué)習(xí)任務(wù)中應(yīng)用有效的證據(jù)。

為矩陣加法和乘法編寫的內(nèi)核。

Majmudar 用 Verilog 構(gòu)建 GPU 帶來了許多問題。這是最困難的部分,學(xué)會(huì)了很多知識(shí),但也多次重寫了代碼。值得一提的是,Majmudar 得到了 George Hotz 的建議與幫助。 

最初,他將全局內(nèi)存實(shí)現(xiàn)為 SRAM,大佬給出的反饋說這違背了構(gòu)建 GPU 的整個(gè)目的 ——GPU 的最大設(shè)計(jì)挑戰(zhàn)是管理訪問有限帶寬的異步內(nèi)存(DRAM)延遲。

因此,Majmudar 最終使用外部異步內(nèi)存重建了設(shè)計(jì),并最終意識(shí)到還需要添加內(nèi)存控制器。

其次,Majmudar 一開始是用 warp-scheduler 來實(shí)現(xiàn) GPU 的,這是一個(gè)很大的錯(cuò)誤,對于該項(xiàng)目來說太復(fù)雜且沒有必要。還好 George Hotz 及時(shí)提出了反饋。當(dāng)一開始收到反饋時(shí),Majmudar 甚至沒有足夠的背景知識(shí)來完全理解它,所以花了很多時(shí)間嘗試構(gòu)建一個(gè) Warp 調(diào)度程序,這才醒悟過來。

這還沒有完,一開始的設(shè)計(jì)中,Majmudar 沒有在每個(gè)計(jì)算核心內(nèi)正確實(shí)現(xiàn)調(diào)度,因此不得不回過頭,分階段設(shè)計(jì)計(jì)算核心執(zhí)行以獲得正確的控制流。

最終,Majmudar 對代碼的第三次重寫實(shí)現(xiàn)了目標(biāo),修復(fù)了計(jì)算核心的執(zhí)行調(diào)度。

這是用 Verilog 構(gòu)建的 GPU 中單個(gè)線程的執(zhí)行流程,它的執(zhí)行方式與 CPU 非常相似。

經(jīng)過大量重新設(shè)計(jì)后,我們終于可以看到 GPU 運(yùn)行矩陣加法和乘法時(shí)內(nèi)核的景象了??吹揭磺姓9ぷ?,GPU 輸出了正確的結(jié)果,這是一種不可思議的感覺。

圖片

然后,我們還需要將設(shè)計(jì)通過 EDA 流程,轉(zhuǎn)換為完整的芯片布局。

圖片

完整的 Verilog 設(shè)計(jì)是通過 OpenLane EDA 實(shí)現(xiàn)的,采用 Skywater 130nm 工藝節(jié)點(diǎn)(用于 Tiny Tapeout)。Majmudar 特別解釋說,一些設(shè)計(jì)規(guī)則檢查 (DRC) 失敗,需要返工。

經(jīng)過兩周的努力,Majmudar 的 GPU 設(shè)計(jì)的 3D 可視化如下圖所示:

圖片

CPU、GPU 都做了出來

Adam Majmudar 表示自己在很短的時(shí)間內(nèi),了解了芯片架構(gòu)的基礎(chǔ)知識(shí),掌握了芯片制造的細(xì)節(jié),并使用 EDA 工具完成了他的第一個(gè)完整芯片布局,即手搓 CPU。

談到如何能做到「手搓芯片」,Majmudar 總結(jié)主要分 6 步:

  • 學(xué)習(xí)芯片架構(gòu)的基礎(chǔ)知識(shí);
  • 學(xué)習(xí)芯片制造的基礎(chǔ)知識(shí),包括材料、晶圓制備、圖案化和封裝等;
  • 通過逐層制作 CMOS 晶體管開始電子設(shè)計(jì)自動(dòng)化;
  • 用 Verilog 創(chuàng)建第一個(gè)完整電路;
  • 為電路實(shí)施仿真和形式驗(yàn)證;

設(shè)計(jì)完整芯片布局,使用 OpenLane(一種開源 EDA 工具)進(jìn)行設(shè)計(jì)和優(yōu)化。

在工程師圈子里,時(shí)不時(shí)會(huì)有人去嘗試「手搓芯片」,用最硬核的方式去了解芯片架構(gòu)的基礎(chǔ)知識(shí)。不過在以前,大多數(shù)人因?yàn)殡y度,嘗試的是 CPU。

2020 年,中國科學(xué)院大學(xué)公布了首期「一生一芯」計(jì)劃的結(jié)果,曾經(jīng)引發(fā)了人們的熱議。該計(jì)劃是在國內(nèi)首次以流片為目標(biāo),由 5 位 2016 級本科生主導(dǎo)完成一款 64 位 RISC-V 處理器 SoC 芯片設(shè)計(jì)并實(shí)現(xiàn)流片。

此項(xiàng)目還得到了 RISC 體系奠基人、圖靈獎(jiǎng)得主 David Patterson 教授的關(guān)注。

得益于開源芯片、敏捷設(shè)計(jì)等行業(yè)新趨勢的發(fā)展,芯片的設(shè)計(jì)門檻正在越來越低。

或許手搓 GPU 的先例出現(xiàn)后,我們會(huì)看到更多、性能更加強(qiáng)大的自造芯片實(shí)踐。

責(zé)任編輯:張燕妮 來源: 機(jī)器之心
相關(guān)推薦

2016-02-19 09:33:14

無線知識(shí)無線技術(shù)2016

2023-06-05 07:35:03

2023-05-18 07:30:16

OpenCLGPU平臺(tái)生態(tài)

2020-09-28 15:13:04

鴻蒙

2024-07-03 10:20:25

2020-07-02 15:32:23

Kubernetes容器架構(gòu)

2024-12-06 17:02:26

2015-11-17 16:11:07

Code Review

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2019-01-18 12:39:45

云計(jì)算PaaS公有云

2019-06-25 10:46:04

Flutter開發(fā)APP

2024-05-15 14:29:45

2012-08-31 11:21:41

浪潮英偉達(dá)ICCE

2010-05-26 17:35:08

配置Xcode SVN

2018-09-14 17:16:22

云計(jì)算軟件計(jì)算機(jī)網(wǎng)絡(luò)

2023-10-09 13:19:51

AI軟件

2024-01-29 13:56:55

AI數(shù)據(jù)

2024-11-28 10:35:47

2012-05-11 11:32:52

英偉達(dá)CUDA編譯器

2024-04-10 07:48:41

搜索引擎場景
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)