## 1. 簡介 Gemmini 是由 UC Berkeley 開發的深度學習硬體加速器,作為 RISC-V 的擴展實現。它是一個全系統、全棧式(Full Stack)的 DNN 硬體探索開發和評估平台。 ### 1.1 特點 - 使用 Chisel 硬體描述語言開發。 - 整合到 Chipyard Ecosystem。 - 實現為 RoCC (Rocket Custom Coprocessor) 加速器。 - 支援多種深度學習操作。 ## 2. 硬體架構 ![Gemmini](https://hackmd.io/_uploads/BkRHzDEVJg.png) --- 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/)