Course Code: gpuprogopenacc
Duration: 28 hours
Prerequisites:
  • 瞭解 C/C++ 或 Fortran 語言和並行程式設計概念
  • 計算機體系結構和記憶體層次結構的基礎知識
  • 具有命令行工具和代碼編輯器的經驗

觀眾

  • 希望瞭解如何使用 OpenACC 對異構設備進行程式設計並利用其並行性的開發人員
  • 希望編寫可在不同平臺和設備上運行的可移植且可擴展代碼的開發人員
  • 希望探索異構程式設計的高級方面並優化其代碼生產力的程式師
Overview:

OpenACC 是異構程式設計的開放標準,它使代碼能夠在不同的平臺和設備上運行,例如多核 CPU、GPU、FPGA 等。OpenACC 提供了一個高級抽象,允許程式師使用指令和子句對代碼進行註釋,而無需修改原始代碼結構或語法。OpenACC 處理目標設備的並行化、數據移動和優化細節,同時保留代碼的可移植性和可讀性。

這種以講師為主導的現場培訓(遠端或遠端)面向希望使用 OpenACC 對異構設備進行程式設計並利用其並行性的初級到中級開發人員。

在培訓結束時,參與者將能夠:

  • 設置一個開發環境,其中包含 OpenACC SDK、支援 OpenACC 的設備和 Visual Studio 代碼。
  • 創建一個基本的 OpenACC 程式,用於在設備上執行向量加法並從設備記憶體中檢索結果。
  • 使用 OpenACC 指令和子句對代碼進行註釋,並指定並行區域、數據移動和優化選項。
  • 使用 OpenACC API 查詢裝置資訊、設置設備編號、處理錯誤和同步事件。
  • 使用 OpenACC 庫和互操作性功能將 OpenACC 與其他程式設計模型(如 CUDA、OpenMP 和 MPI)集成。
  • 使用 OpenACC 工具分析和調試 OpenACC 程式,並確定性能瓶頸和機會。
  • 使用數據局部性、迴圈融合、內核融合和自動調優等技術優化 OpenACC 程式。

課程形式

  • 互動講座和討論。
  • 大量的練習和練習。
  • 在現場實驗室環境中動手實施。

課程定製選項

  • 如需申請本課程的定製培訓,請聯繫我們安排。
Course Outline:

介紹

  • 什麼是 OpenACC?
  • OpenACC 與 OpenCL 與 CUDA 與 SYCL
  • OpenACC 功能和體系結構概述
  • 設置開發環境

開始

  • 使用 Visual Studio 代碼創建新的 OpenACC 專案
  • 探索項目結構和檔
  • 編譯和運行程式
  • 使用 printf 和 fprintf 顯示輸出

OpenACC 指令和條款

  • 瞭解 OpenACC 指令和子句在主機和設備代碼中的作用
  • 使用 OpenACC 並行指令和子句創建並行區域並指定 gang、worker 和 vector 的數量
  • 使用 OpenACC 內核指令和子句創建內核區域,並讓編譯器決定並行性
  • 使用 OpenACC 循環指令和子句並行化迴圈並指定迴圈分佈、摺疊、縮減和平鋪
  • 使用 OpenACC 資料指令和子句管理數據行動和資料區域
  • 使用 OpenACC 更新指令和子句在主機和設備之間同步數據
  • 使用 OpenACC 快取指令和子句來改進資料重用和局部性
  • 使用 OpenACC 例程指令和子句創建設備函數並指定函數類型和向量長度
  • 使用 OpenACC wait 指令和子句同步事件和依賴項

OpenACC 介面

  • 瞭解 OpenACC API 在主機程式中的作用
  • 使用 OpenACC API 查詢設備資訊和功能
  • 使用 OpenACC API 設定裝置編號和設備類型
  • 使用 OpenACC API 處理錯誤和異常
  • 使用 OpenACC API 建立和同步事件

OpenACC 庫和互操作性

  • 瞭解 OpenACC 庫和互操作性功能在設備程式中的作用
  • 使用 OpenACC 庫(如數學庫、隨機庫和複數庫)執行常見任務和操作
  • 使用 OpenACC 互操作性功能(如 deviceptr、use_device 和 acc_memcpy)將 OpenACC 與其他程式設計模型(如 CUDA、OpenMP 和 MPI)集成
  • 使用 OpenACC 互操作性功能(如 host_data 和 declare)將 OpenACC 與 GPU 庫(如 cuBLAS 和 cuFFT)集成

OpenACC 工具

  • 瞭解 OpenACC 工具在開發過程中的作用
  • 使用 OpenACC 工具分析和調試 OpenACC 程式,並確定性能瓶頸和機會
  • 使用 OpenACC 工具(如 PGI 編譯器、NVIDIA Nsight Systems 和 Allinea Forge)來衡量和提高執行時間和資源利用率

優化

  • 了解影響 OpenACC 程式性能的因素
  • 使用 OpenACC 指令和子句來優化數據局部性並減少數據傳輸
  • 使用 OpenACC 指令和子句來優化迴圈並行性和融合
  • 使用 OpenACC 指令和子句優化內核併行性和融合
  • 使用 OpenACC 指令和子句優化矢量化和自動調整

摘要和後續步驟

Sites Published:

United Arab Emirates - GPU Programming with OpenACC

Qatar - GPU Programming with OpenACC

Egypt - GPU Programming with OpenACC

Saudi Arabia - GPU Programming with OpenACC

South Africa - GPU Programming with OpenACC

Brasil - GPU Programming with OpenACC

Canada - GPU Programming with OpenACC

中国 - GPU Programming with OpenACC

香港 - GPU Programming with OpenACC

澳門 - GPU Programming with OpenACC

台灣 - GPU Programming with OpenACC

USA - GPU Programming with OpenACC

Österreich - GPU Programming with OpenACC

Schweiz - GPU Programming with OpenACC

Deutschland - GPU Programming with OpenACC

Czech Republic - GPU Programming with OpenACC

Denmark - GPU Programming with OpenACC

Estonia - GPU Programming with OpenACC

Finland - GPU Programming with OpenACC

Greece - GPU Programming with OpenACC

Magyarország - GPU Programming with OpenACC

Ireland - GPU Programming with OpenACC

Luxembourg - GPU Programming with OpenACC

Latvia - GPU Programming with OpenACC

España - GPU Programming with OpenACC

Italia - GPU Programming with OpenACC

Lithuania - GPU Programming with OpenACC

Nederland - GPU Programming with OpenACC

Norway - GPU Programming with OpenACC

Portugal - GPU Programming with OpenACC

România - GPU Programming with OpenACC

Sverige - GPU Programming with OpenACC

Türkiye - GPU Programming with OpenACC

Malta - GPU Programming with OpenACC

Belgique - GPU Programming with OpenACC

France - GPU Programming with OpenACC

日本 - GPU Programming with OpenACC

Australia - GPU Programming with OpenACC

Malaysia - GPU Programming with OpenACC

New Zealand - GPU Programming with OpenACC

Philippines - GPU Programming with OpenACC

Singapore - GPU Programming with OpenACC

Thailand - GPU Programming with OpenACC

Vietnam - GPU Programming with OpenACC

India - GPU Programming with OpenACC

Argentina - GPU Programming with OpenACC

Chile - GPU Programming with OpenACC

Costa Rica - GPU Programming with OpenACC

Ecuador - GPU Programming with OpenACC

Guatemala - GPU Programming with OpenACC

Colombia - GPU Programming with OpenACC

México - GPU Programming with OpenACC

Panama - GPU Programming with OpenACC

Peru - GPU Programming with OpenACC

Uruguay - GPU Programming with OpenACC

Venezuela - GPU Programming with OpenACC

Polska - GPU Programming with OpenACC

United Kingdom - GPU Programming with OpenACC

South Korea - GPU Programming with OpenACC

Pakistan - GPU Programming with OpenACC

Sri Lanka - GPU Programming with OpenACC

Bulgaria - GPU Programming with OpenACC

Bolivia - GPU Programming with OpenACC

Indonesia - GPU Programming with OpenACC

Kazakhstan - GPU Programming with OpenACC

Moldova - GPU Programming with OpenACC

Morocco - GPU Programming with OpenACC

Tunisia - GPU Programming with OpenACC

Kuwait - GPU Programming with OpenACC

Oman - GPU Programming with OpenACC

Slovakia - GPU Programming with OpenACC

Kenya - GPU Programming with OpenACC

Nigeria - GPU Programming with OpenACC

Botswana - GPU Programming with OpenACC

Slovenia - GPU Programming with OpenACC

Croatia - GPU Programming with OpenACC

Serbia - GPU Programming with OpenACC

Bhutan - GPU Programming with OpenACC

Nepal - GPU Programming with OpenACC

Uzbekistan - GPU Programming with OpenACC