## 1. 簡介 Gemmini 是由 UC Berkeley 開發的深度學習硬體加速器,作為 RISC-V 的擴展實現。它是一個全系統、全棧式(Full Stack)的 DNN 硬體探索開發和評估平台。 ### 1.1 特點 - 使用 Chisel 硬體描述語言開發。 - 整合到 Chipyard Ecosystem。 - 實現為 RoCC (Rocket Custom Coprocessor) 加速器。 - 支援多種深度學習操作。 ## 2. 硬體架構  --- 1. **Rocket 區塊**: - Core: RISC-V 處理器核心 - L1 I+D: 一級指令和數據快取 - L2: 二級快取 - DRAM: 主記憶體 - 完整的記憶體階層架構 --- 2. **Gemmini Accelerator** **區塊**: - Controller: - Dependency Mgmt: 依賴關係管理 - DMA Engine: 直接記憶體存取引擎 - Local TLB(Translation Lookaside Buffer): 本地轉譯後備緩衝區,儲存最近使用的頁表項(page table entries),加速虛擬記憶體地址轉換。 - Scratchpad (暫存器): - 包含多個記憶體 Bank (Bank 0 到 Bank K) - 暫存計算數據,比主記憶體快。 - Systolic Array (脈動陣列) :用於矩陣運算 - 額外功能單元: - Transposer: 矩陣轉置器,進行矩陣轉置。 - ReLU: 激活函數單元 ```markdown 輸入 x < 0:輸出 = 0 輸入 x ≥ 0:輸出 = x ``` - Scaling: 縮放運算單元 (映射位元大小) - Accumulator SRAM: 累加器記憶體 --- 3. **交互關係**: - RoCC Cmd: Rocket 核心通過 RoCC 接口發送命令給 Gemmini - RoCC PTW(Page Table Walk 頁表走訪): PWL 在 TLB 未命中時觸發: ```markdown= 檢查 TLB TLB 未命中 開始頁表走訪:虛擬地址 -> 頁目錄 -> 頁表 -> 實體地址 更新 TLB ``` - Gemmini 可以直接訪問 L2 快取 ``` markdown 優化路徑:Accelerator -> L2 <-> CPU ``` --- ### 2.1 核心組件 - 脈動陣列 (Systolic Array):執行矩陣乘法運算 - 私有記憶體:包含暫存器 (Scratchpad) 和累加器 (Accumulator) - DMA 引擎:處理主記憶體和私有記憶體間的數據傳輸 - RoCC 接口:與主處理器通訊 ``` scala= //gemmini/src/main/scala/gemmini/Configs.scala class GemminiConfigs { // 系統陣列配置 val tileRows = 1 val tileColumns = 1 val meshRows = 16 val meshColumns = 16 // 記憶體配置 val sp_capacity = CapacityInKilobytes(256) val acc_capacity = CapacityInKilobytes(64) // 數據流配置 val dataflow = Dataflow.BOTH } ``` ## 3. 軟體 ### 3.1 開發環境設置 ```bash # 基本環境設置 git clone https://github.com/ucb-bar/chipyard.git cd chipyard ./build-setup.sh source env.sh # 設置 Gemmini cd generators/gemmini make -C software/libgemmini install ./scripts/setup-paths.sh ``` ### 3.2 程式開發結構 ```bash chipyard/generators/gemmini/software/ ├── gemmini-rocc-tests/ │ ├── bareMetalC/ # 裸機程式 │ ├── include/ # 核心 API │ └── imagenet/ # 範例應用 └── onnxruntime-riscv/ # ONNX 支援? ``` ## 4. 應用場景 ### 4.1 支援的運算 - 矩陣乘法 - 卷積運算 - 池化操作 - 激活函數(ReLU) - 量化操作 ### 4.2 深度學習模型支援 - CNN (如 ResNet50) - MLP (多層感知器) - 其他基於矩陣運算的網路 - ONNX 格式模型 ## 5. 性能優化 ### 5.1 硬體層面優化 - 調整系統陣列大小 - 優化記憶體配置 - DMA 參數調整 ### 5.2 軟體層面優化 ```c= // 任務分配優化 void optimize_task() { if (matrix_size > LARGE_THRESHOLD) { gemmini_matmul_loop(A, B, C, ...); // 使用加速器 } else { cpu_matmul(A, B, C); // 使用 CPU } } ``` ## 運行環境 ### 6.1 Linux 環境 - 有完整的作業系統的支援 - 支援應用開發 - 適合系統級測試 ### 6.2 Bare-metal 環境 - 無作業系統開銷花費 - 直接進行硬體控制 - 適合性能測試 ## 7. 實際應用 ### 7.1 適用場景 - 深度學習 理解&推論 - 矩陣運算加速 - 嵌入式 AI 應用 ## 8. 參考來源 - [Gemmini GitHub Repository](https://github.com/ucb-bar/gemmini) - [Chipyard Documentation](https://chipyard.readthedocs.io/en/latest/Generators/Gemmini.html) - [RISC-V Documentation](https://riscv.org/technical/specifications/) ## 9. 分享 - [FB社團討論](https://www.facebook.com/groups/riscv.tw/permalink/2482199025320930/)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.