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