- 了解 C/C++ 或 Fortran 语言和并行编程概念
- 计算机体系结构和内存层次结构的基础知识
- 具有命令行工具和代码编辑器的经验
观众
- 希望了解如何使用 OpenACC 对异构设备进行编程并利用其并行性的开发人员
- 希望编写可在不同平台和设备上运行的可移植且可扩展代码的开发人员
- 希望探索异构编程的高级方面并优化其代码生产力的程序员
OpenACC 是异构编程的开放标准,它使代码能够在不同的平台和设备上运行,例如多核 CPU、GPU、FPGA 等。OpenACC 提供了一个高级抽象,允许程序员使用指令和子句对代码进行注释,而无需修改原始代码结构或语法。OpenACC 处理目标设备的并行化、数据移动和优化细节,同时保留代码的可移植性和可读性。
这种以讲师为主导的现场培训(远程或远程)面向希望使用 OpenACC 对异构设备进行编程并利用其并行性的初级到中级开发人员。
在培训结束时,参与者将能够:
- 设置一个开发环境,其中包含 OpenACC SDK、支持 OpenACC 的设备和 Visual Studio 代码。
- 创建一个基本的 OpenACC 程序,用于在设备上执行向量加法并从设备内存中检索结果。
- 使用 OpenACC 指令和子句对代码进行注释,并指定并行区域、数据移动和优化选项。
- 使用 OpenACC API 查询设备信息、设置设备编号、处理错误和同步事件。
- 使用 OpenACC 库和互操作性功能将 OpenACC 与其他编程模型(如 CUDA、OpenMP 和 MPI)集成。
- 使用 OpenACC 工具分析和调试 OpenACC 程序,并确定性能瓶颈和机会。
- 使用数据局部性、循环融合、内核融合和自动调优等技术优化 OpenACC 程序。
课程形式
- 互动讲座和讨论。
- 大量的练习和练习。
- 在现场实验室环境中动手实施。
课程定制选项
- 如需申请本课程的定制培训,请联系我们安排。
介绍
- 什么是 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 指令和子句优化矢量化和自动调整
摘要和后续步骤
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