計算機架構與系統實驗室

Computer Architecture and System Laboratory

使用者工具

網站工具


group:aionchip

差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
最後一次修改 Both sides next revision
group:aionchip [2020/06/03 07:06]
admin
group:aionchip [2020/06/03 08:14]
admin
行 68: 行 68:
 \\ \\
 ==== HSA runtime ==== ==== HSA runtime ====
 +類似於 OpenCL 提供一共同的平行運算軟體開發 Framework,HSA 其旨為提供一共同硬體介面。不同於 OpenCL 規範了統一的應用程式開發介面,HSA 規範了統一的硬體操作介面,以簡化上層如 OpenCL 等與底層進行橋接介面之開發複雜度。HSA主要定訂了 Master Device (E.g. CPU) 與 Slave Device (E.g. GPU) 之間的記憶體空間擺放格式、資料傳輸方式與指令傳送方式等基本溝通協定。並定義一共用中介語言HSAIL (Heterogeneous System Architecture Intermediate Language) 供軟體層使用,使高階語言如 OpenCL Kernel Code Compiler 設計商不需要針對不同目標硬體額外開發一套編譯器,僅需於 Kernel 派發時由裝置定義之 Finalizer 將 HSAIL 轉譯至目標可執行檔。舉例來說,HSA 與 OpenCL 進行整合時 OpenCL Kernel Code 轉至 HSAIL 之編譯器可為採用 AMD CLOC,而目標硬體為 CASLab GPU 時再透過我們實驗室先前所開發之 Finalizer 將 HSAIL 進行指令擴充、對應並編譯為 CASLab GPU 所支援之可執行檔。但這套流程在實際執行上的效能並不佳,因為編譯器採用的是 AMD CLOC 在 
 +許多時候並不能針對目標硬體去優化,因此 CASLab GPU 是採用 HSA + LLVM Compiler 來達到編譯執行檔的優化。 
 +CASLab 實作之 HSA runtime 如 Fig. 6 所示,HSA API 可分成四大類,與 OpenCL API 相互對應。 
 +1. Agent 相關,與 OpenCL API 中 Platforms 對應,用以取得硬體相關資訊。 
 +2. Program 相關,此部分直接呼叫 CASLab OpenCL Compiler 來將使用者的 Device code 編譯成 GPU 執行檔。 
 +3. Memory 相關,與 OpenCL API 中的 Memory object 對應,為 OpenCL 
 +API 中所需要的 GPU 記憶體做管理。 
 +4. Queues and Signals 相關,與 OpenCL API 的 Command Queue 對應, 
 +可將 OpenCL API 中所發出的工作,轉換成信號通知 GPU 來執行。 
 +\\ 
 +\\ 
 +<<fig6>> 
 +\\ 
 +\\
 ==== LLVM Compiler ==== ==== LLVM Compiler ====
- +LLVM 全名為 Low Level Virtual Machine,由 Vikram Adve 與 Chris Lattner 進行開發。LLVM 起源為針對動態與靜態編譯研究所設計的開發環境/虛擬機器,提供數種開發與分析工具搭配直譯器/虛擬平台以執行目標程式;隨著專案開發越來越豐富,LLVM 發展方向也逐漸由虛擬平台轉變為編譯器開發框架,專案名稱內的 Virtual Machine 也不再代表虛擬機開發,使目前 LLVM 專案名稱僅以代表整體開發、不再具備原先專案意義。也由於 LLVM 逐漸轉向 Compiler 開發框架,開始越來越多公司轉向支持/採用 LLVM 作為其硬體 Compiler 之開發環境,如 Apple 於 2005 年開始大 
 +力支持 LLVM,且採用 LLVM 平台作為其作業系統之預設編譯環境提供使用者使用。
 \\ \\
-==== CASLab GPU 硬體架構與設計 ==== 
- 
-隨著大量應用產品與需求的出現,繪圖引擎近來擔任大量平行運算的重要角色。本實驗室GPU團隊現在正積極地在開發符合OpenCL/TensorFlow API規範的終端人工智慧Edge-AI之處理器系統,在GPGPU基礎上進行優化設計,並發展人工智慧多線程應用程式的執行環境。 
 \\ \\
-<imgcaption image1|HSA>{{ :group:gpgpu.png?350}}</imgcaption>+<<fig7>> 
 +\\
 \\ \\
-  - **CASLAB GPUsim** \\ To overcome the complex development process, adopting TLM methodology can build the system by incremental development process, which makes verification and validation in early development stage possible.\\ \\ We develop the cycle-accurate SIMT core by basic cycle-accurate modeling approach and evaluate its performance on CASLAB-GPUSim cosimulation platform. 
- 
 \\ \\
 +普遍編譯器設計上會依工作內容進行分工,將整體編譯流程拆分為 Compiler Front-End、Optimizer 與 Backend 這三部分元件,其編譯流程如 Fig. 7 所示。其個別功能為:Front-End-負責進行與語言相關的處理;例如,將由 C++所設計之程式碼進行轉譯、轉譯為內部所需的 AST Tree 等語法樹資料結構,並執行語言前處理相關步驟。Optimizer 則為程式碼內容相關的優化步驟;例如,常數前處理、條件式優化等等與語言相依的優化處理。Backend 則將前兩部分所產生的資料結構進行指令統整,並產生出目標可執行的指令、檔案格式。
  
-==== 支援異質系統架構(HSA)Unified Shader GPU架構設計 ==== +為了於 LLVM Infrastructure 中新增 CASLab GPU 目標硬體支援,需要 LLVM Project 內的” lib/Target”目錄中新增本實驗室設計硬體平台-CASLab GPU,為方便使用,將名稱簡化為 CASGPU。CASLab GPU Target Machine 於 LLVM Project內的模組架構如 Fig. 8 所示。
-(Unified Shader GPU Architecture based on HSA)+
  
-隨著GPU技術進步繪圖效的提升,視覺運算領域正快速的發展。使用GPU來做大量平行處理通用運算GPU(GPGPU - General Purpose GPU),以及整合CPUGPU的異質性系統,但大幅提升了運算效能更是研究的趨勢之。[[http://www.hsafoundation.com/|HSA Foundation]]所提出異質運算系統架構(Heterogeneous System Architecture)便希望整合CPUGPU的架構步提升整個系統運算的效能。+我們需要先建構出硬體命名空間-CASGPU,並於該命名空間內建立各項子模組等平台內需使用之相關功能。CASGPU 作為 CASLab GPU 硬體於 LLVM 中的 Target Machine表示諸如 X86、ARM 與 RISC-V 等同目標硬體架構。另外在 CASGPU Target Machine 下,另外新增了名為 HSA SubTarget,用以代表在 CASGPU 目標平台下採用 HSAIL-lite 指令格式目標架構,並依據 HSAIL 之規範於此定義共用之參數功能;例如Memory Space 與 Calling Convention 等。最後,定義目標晶片(C100-CASLab-GPU ISA V1.0.0),以代號”CA”作為硬體代表並作為各設計檔案命名前綴,於內部定義暫存器數量、指令支援等硬體相依之功能。
 \\ \\
-<imgcaption image1|HSA>{{ :group:HSA_lab.png?250}}</imgcaption+\\ 
-=== 異質系統架構 === +<<fig8>
- +\\ 
-  - **HSA Immediate Language** \\ HSA introduced a low-level intermediate language, which is portable across multiple platforms. +\\ 
-  - **Hetergeneous Uniform Memory Access (hUMA)** \\ Unified Memory Address Space reduces memory bandwidth between CPU and GPU to improve performance. +\\ 
-  - **Hetergeneous Queuing (hQ)** \\ GPU and CPU have equal flexibility to create and dispatch work items which reduces dispatch latency to GPU.+在說明完 LLVM Compiler 在 CASLab GPU 是如何規劃後,實作上我們的編譯器目前包含了大約 15000 行的Ccode。
  
 +Fig. 9 顯示 CASLab GPU 編譯器與 CUDA 的系統對照圖。圖中最上層的是輸入資料的格式, CUDA 要求輸入 CUDA 格式的 .cu 檔案,其他兩者為 CASLab 支援OpenCL 的 .cl 檔案。而第二層則是三者分別使用的不同編譯器,原版的 CASLab GPU 是採用 AMD CLOC + Finalizer 方案,但因為 AMD CLOC 只提供 Binary 使用,而必須符合其架構設計出對應的 Finalizer 導致許多優化無法達到,新版的CASLab GPU 設計了自己的 OpenCL LLVM Compiler,使平台更有彈性,也達到效能上的優化。
 +\\
 +\\
 +<<fig9>>
 +\\
 \\ \\
-===== 研究成果 ===== 
-<imgcaption image2|GPU Simulator>{{ :group:HSA_Sim_lab.png?250}}</imgcaption> 
-為了研究並且模擬異質系統架構的運算,我們實作了一個基於異質系統架構(HSA)的GPU模擬器。此模擬器包含: 
 \\ \\
-  - **Custom GPU ISA** \\ Which is based on the HSAIL BRIG and Nvidia PTX Virtual ISA 
-  - **HSAIL to HSA Binary Translator** 
-  - **GPU Simulator** 
  
-A fundamental GPU Simulator based on our Custom GPU ISA which includes fixed-size register file, warp scheduler, dispatch unit and SIMD execution units for parallel computing. The Simulator also supports 80 of 110 (73%) instructions, and solution to the divergent control flow and synchronization.+==== CASLab GPU 硬體架構與設計 ====
  
 +CASLab GPU 為一 SIMT (Single Instruction Multiple Thread)架構,如 Fig.10 所示,主要由 Interconnection Network (IN)、多個 SM (Streaming Multiprocessor)、WS (Workgroup Scheduler)所組成。IN 負責連接外部 DRAM 和各個元件之間以及資料的搬運。SM 則是運算與執行的主要核心單元,WS 為 GPU 內部之總控制器,主要負責與 CPU 溝通、接收來自 CPU 的工作以及派發Workgroup。
 +
 +GPU 執行緒的排程會經由兩層不同的排程單元來派發執行緒,第一排程器Workgroup Scheduler。當 CPU 發送新的工作時,以 Grid 為單位接收所要執行之程式,再進行切割與排程後,以 Workgroup 為單位派發至每個 SM 去做執行。SM 在收到 Workgroup 後,會根據 SIMD width 分成多個 Warp,並以 Warp 為單位進行運算,同一個 Warp 內的執行緒為平行運算。第二排程器為位於 SM 內部 Front-end 的 Warp Scheduler,將多個 Warp 進行排程後,交由 Back-end 運算單元處理。
 +\\
 +\\
 +<<fig10>>
 +\\
 \\ \\
-===== 團隊成員 ===== 
-==== 現任成員 ==== 
-^ 碩士班二年級    | | 
-^ 碩士班一年級    | | 
-^ 大學部    || 
 \\ \\
-===== 研究計畫 =====+CASLab GPU 的 SM 架構如 Fig. 11 所示,可分為 Workgroup Initializer、Front-end Pipeline 和 Back-end Pipeline 三部分。Workgroup Initializer 負責接收Workgroup 以及其初始化,Front-end 主要為 Warp 之排程以及指令的前處理與Decode,Back-end 則負責資料的運算以及 Load/Store 之相關。
  
 +下面章節會分別對 Workgroup Initializer、Warp Scheduler、Divergence
 +Stack 這三個對 GPGPU 極為重要的模組做介紹。
 \\ \\
-===== 外部連結 ===== +\\ 
-  - [[http://www.hsafoundation.com/|HSA Foundation]] +<<fig11>> 
 +\\ 
 +\\ 
 +\\ 
 +==== Workgroup Initializer ==== 
 +==== Warp Scheduler ==== 
 +==== Divergence Stack ====
  
 \\ \\
-{{tabinclude>tab:research|研究成, *tab:group|研究群組, tab:member|實驗室成員, tab:course|課}} +===== 設計驗證結與效能評估 ===== 
- +==== 實驗環境 ==== 
- +==== 測試式 ==== 
 +==== CASLab LLVM Compiler 效能結果 ==== 
 +==== CASLab GPUsim 效能結果 ==== 
 +==== FPGA 驗證成果 ====
  
 +\\
 +===== 附錄 ===== 
  
group/aionchip.txt · 上一次變更: 2020/06/03 09:13 由 admin