Sessions 議程

日期:2015/03/06 (五)
地點:台灣大學博理館2樓201

TimeTitleSpeaker
08:30 - 08:50報到
08:50 - 09:00致詞徐慰中教授
09:00 - 09:50Introduction 

HSA,異質計算,是一個術業有專攻的概念:透過 CPU 以外的處理器加速運算,讓 CPU 不擅長的 Data Parallel 運算放到 GPU 上分成一個個階段,每一階段都可以同時執行的 Pipeline 運算丟到 FPGA 上執行,讓擅長該運算方式的處理器做運算以達到加速或更省電的功用。

例如,透過 FPGA 加速的百度搜尋引擎可在一半的功耗下達到相同的運算速度;只用 4 張 Nvidia K80 GPU 卡就能比 google brain 一個機房更快速的用 Deep Learning 做出狗或人臉的辨識。

但此種整合需要軟體上的新語言,需能在易於撰寫且完整支援硬體的情況下更快速的傳遞訊息到各個異質處理器,否則光是傳遞的延遲就會拖累運算的速度,因此才有了 HSA 的誕生。

本議程將會教導 HSA 的基本觀念和 HSA 的必要性及用途,讓大家了解所謂的異質計算,一窺 HSA 的世界。

檔案下載

Medicine Yeh
09:50 - 10:40HSAIL Virtual Parallel ISA 

為了提升可移植性以及降低平行化程式設計的複雜度,HSA 異質多核心架構中引入了 HSAIL (HSA Intermediate Language),做為銜接主程式與平行計算架構的中介碼。對 GPU 這類平行處理器,HSAIL 提供了指令集的抽象化,使高階語言的編譯器能夠簡單的利用 GPU 進行加速且不需要顧及底層的實作。透過編譯器的支援,我們可以在單一份 C / C++ / Java 程式碼中,發揮異質系統上各個裝置的計算效能,而不需要從外部調用複雜的 API 或使用特別的語言實作平行計算。

本議程可分為兩個部份。首先為對 HSAIL 的簡介,包含了指令架構的介紹以及 HSA 平台中如何實現平行化執行,並以 OpenCL kernel 的實例來說明 HSAIL 如何扮演中間碼的角色。後半段則為現行編譯及開發工具的簡介,並透過實際 HSAIL 的編譯流程進一步了解 HSAIL 的運作方式。

檔案下載

Sean Wu
10:40 - 11:10休息時間 和 海報展示
11:10 - 12:00HSA Runtime 

HSA是近年來針對異質運算所提出來的新架構,主要用來將各種運算資源如 CPU、GPU、加速元件整合到一個具備分享式高頻寬記憶體的系統平台之中,來取得更有效的系統功耗及運算性能。HSA 設計的主要目的在於整合市場上現有的加速元件,定義新標準規格並從架構上來結合這些加速元件,並利用跟現有的多核心程式設計方式類似的主流程式設計語言來編程,以取得這些加速元件所帶來的好處。

簡單地說,HSA 主要包括 (1) HSA 系統架構、(2) HSAIL 即編譯過的低階中間碼語言 (HSA Intermediate Language)、(3) HSA Finalizer 這是一種低階簡單的編譯器用來將 HSAIL 代碼編譯成本機機器碼 (native machine code),以及 (4) HSA Runtime API 執行期間應用程式設計界面 (以下簡稱 HSART),後者即提供單一標準的 HSART 給各家系統平台廠商用來產生代碼以控制相關的 HSA 組件 (HSA Component)。

本議程主要介紹 HSA 執行期間核心 (Core) 應用程式設計界面,這裡會簡要說明 HSART 在整個 HSA 應用程式設計開發執行的角色、核心程式設計界面 (Core Runtime API) 的功能簡介及圖示的範例,主要內容有:

  • Runtime Initialization and Shut Down
  • Notifications (Synchronous / Asynchronous)
  • Memory Based Signals
  • Architected Queues
  • Memory Management

檔案下載

JP Shieh
12:00 - 13:00午餐時間
13:00 - 13:50HSA Memory Model 

HSA Memory Model 定義了在 HSA 架構裡記憶體系統將依循何種規則來執行來自多個 work-items 的記憶體存取 (memory operations),讓程式設計者能更容易地推論平行程式的執行結果以提高撰寫效率,並讓編譯器 (compiler) 其系統設計者 (system designer) 有足夠的空間對應用程式進行優化 (optimization)。

本議程將深入淺出地介紹 Memory Model 的基礎概念,藉此了解 HSA 於現有的 Memory Model 上做了何種延伸,以及這些延伸的必要性;亦將探討 OpenCL 與 HSA 在 Memory Model 上的對應關係,以及 HSA 架構所帶來的 Cache Coherence 相關議題。

檔案下載

Po-Han Wang
13:50 - 14:40HSA Queuing Model 

HSA Queuing Model 扮演著使用者與 HSA System 之間的溝通橋梁;不論是 Programmer 發送 cmds 到所有 HSA agents (CPUs, GPUs & other accelarators),亦或是 HSA agents 彼此之間需要相互發送 cmds,均得透過 User Mode Queue 來完成。

本議程著重介紹 HSA Queuing Model 的設計理念,配合精簡的虛擬碼說明其使用方法與設計概念上的長處 (V.S. OpenCL convention);同時透過 AQL (Architected Queueing Language) packets 的解說,幫助聽眾理解 AQL 重要欄位的意義與使用機制;User Mode Queue 配合 AQL packets 也就呈現了基礎的 HSA programming model & interfaces。

本議程會需要部分 OpenCL / CUDA 的基礎知識來幫助理解 HSA Queuing Model 的設計理念與長處。

檔案下載

Michael Ruan
14:40 - 15:10休息時間 和 海報展示
15:10 - 16:00HSA Compilation Technology 

傳統上,撰寫 HSA 應用程式大致可以分成兩個部分:Host Program 及 Device (Kernel) Program。Host Program 主要用於 Platform API 及 Runtime API 的調用、呼叫 Device Compiler 以編譯 Kernel Program、設定適當的執行環境以及下指令給 Compute Device 來執行程式。Kernel Program 則包含了平行演算法的撰寫。這種開發流程有一些問題,例如:冗長、重複、容易出錯的程式碼,並且因為需要撰寫不同的編譯單元 (Compilation Unit),其執行流程 (Program Flow) 不容易被了解等等。

為了解決上述問題並提高生產力,有許多更高階的 Programming Model 被提出來討論,當中包含 C++AMP 及 Sumatra Project (Java)。於此議程中,我們將針對討論兩種語言針對 Heterogeneous System Architecture 所提出來的改進及未來可能的發展方向。最後,我們將討論 POCL:一個 Open Source 的 OpenCL 實作。希望藉由此案例,討論 Compiler 如何進行 Optimization 並將程式碼轉換成高效能的 HSA 平行程式。

檔案下載

Clay Chang
16:00 - 16:50HSA Application Programing Techniques

檔案下載

Chih-Cheng Kao
16:50 - 17:30業界時間AMD
17:30 - 18:00座談徐慰中教授、洪士灝教授