聯繫我們

課程簡介

引言

  • 什麼是 OpenCL?
  • OpenCL 與 CUDA 和 SYCL 的比較
  • OpenCL 功能與架構概覽
  • 設定開發環境

入門指南

  • 使用 Visual Studio Code 建立新的 OpenCL 專案
  • 探索專案結構與檔案
  • 編譯與執行程式
  • 使用 printf 和 fprintf 顯示輸出內容

OpenCL API

  • 理解 OpenCL API 在主機程式中的角色
  • 使用 OpenCL API 查詢裝置資訊與能力
  • 使用 OpenCL API 建立內容、命令佇列、緩衝區、核心及事件
  • 使用 OpenCL API 排程命令,如讀取、寫入、複製、映射、取消映射、執行和等待
  • 使用 OpenCL API 處理錯誤與異常

OpenCL C

  • 理解 OpenCL C 在裝置程式中的角色
  • 使用 OpenCL C 編寫在裝置上執行的核心程式並操作資料
  • 使用 OpenCL C 的資料類型、限定符(qualifiers)、運算子與表達式
  • 使用 OpenCL C 內建函數,如數學函數、幾何函數、關係運算等
  • 使用 OpenCL C 擴展與函式庫,如原子操作(atomic)、影像處理(image)、cl_khr_fp16 等

OpenCL 記憶體模型

  • 理解主機與裝置記憶體模型的差異
  • 使用 OpenCL 記憶體空間,如全域、本地、常數和私有
  • 使用 OpenCL 記憶體物件,如緩衝區、影像和管線
  • 使用 OpenCL 記憶體存取模式,如唯讀、唯寫、讀寫等
  • 使用 OpenCL 記憶體一致性模型與同步機制

OpenCL 執行模型

  • 理解主機與裝置執行模型的差異
  • 使用 OpenCL 工作項目、工作群組以及 ND-ranges 來定義平行運算
  • 使用 OpenCL 工作項目函數,如 get_global_id、get_local_id、get_group_id 等
  • 使用 OpenCL 工作群組函數,如 barrier、work_group_reduce、work_group_scan 等
  • 使用 OpenCL 裝置函數,如 get_num_groups、get_global_size、get_local_size 等

除錯

  • 理解 OpenCL 程式中常見的錯誤與 Bug
  • 使用 Visual Studio Code 除錯器檢查變數、斷點、呼叫堆疊等
  • 使用 CodeXL 除錯並分析 AMD 裝置上的 OpenCL 程式
  • 使用 Intel VTune 除錯並分析 Intel 裝置上的 OpenCL 程式
  • 使用 NVIDIA Nsight 除錯並分析 NVIDIA 裝置上的 OpenCL 程式

最佳化

  • 理解影響 OpenCL 程式效能的因素
  • 使用 OpenCL 向量資料類型與向量化技術提升算術吞吐量
  • 使用 OpenCL 迴圈展開與分塊(tiling)技術減少控制開銷並增加局部性
  • 使用 OpenCL 本地記憶體及其函數來最佳化記憶體存取與頻寬
  • 使用 OpenCL 效能分析及相關工具測量並改善執行時間與資源利用率

總結與後續步驟

最低要求

  • 具備 C/C++ 語言與平行編程概念的基礎理解。
  • 具備電腦架構與記憶體階層的基本知識。
  • 具備使用命令列工具與程式碼編輯器的經驗。

適合對象

  • 希望學習如何使用 OpenCL 編程異構裝置,並善用其平行運算能力的開發者。
  • 希望編寫可在不同平台和裝置上執行的可移植且具擴展性程式碼的開發者。
  • 希望探索異構編程低層面技術並最佳化程式效能的程式設計師。
 28 小時

課程分類