- 理解C/C++语言和并行编程概念
- 具备计算机架构和内存层次结构的基础知识
- 有使用命令行工具和代码编辑器的经验
受众
- 希望学习如何使用OpenCL编程异构设备并利用其并行性的开发者
- 希望编写可移植且可扩展代码的开发者,代码能够在不同平台和设备上运行
- 希望探索异构编程的低层细节并优化代码性能的程序员
OpenCL 是一个用于异构编程的开放标准,它使代码能够在不同平台和设备上运行,例如多核CPU、GPUs、FPGA等。OpenCL 让程序员深入了解硬件细节,并完全控制并行化过程。然而,这也需要对设备架构、内存模型、执行模型和优化技术有良好的理解。
本课程为讲师指导的培训(线上或线下),面向希望使用 OpenCL 进行异构设备编程并利用其并行性的初级到中级开发者。
在本课程结束时,参与者将能够:
- 设置一个开发环境,包括 OpenCL SDK、支持 OpenCL 的设备和 Visual Studio Code。
- 创建一个基本的 OpenCL 程序,在设备上执行向量加法,并从设备内存中检索结果。
- 使用 OpenCL API 查询设备信息,创建上下文、命令队列、缓冲区、内核和事件。
- 使用 OpenCL C 语言编写在设备上执行并操作数据的内核。
- 使用 OpenCL 内置函数、扩展和库来执行常见任务和操作。
- 使用 OpenCL 主机和设备内存模型来优化数据传输和内存访问。
- 使用 OpenCL 执行模型来控制工作项、工作组和 ND 范围。
- 使用 CodeXL、Intel VTune 和 NVIDIA Nsight 等工具调试和测试 OpenCL 程序。
- 使用向量化、循环展开、本地内存和分析等技术优化 OpenCL 程序。
课程形式
- 互动讲座和讨论。
- 大量练习和实践。
- 在实验室环境中进行实际操作。
课程定制选项
- 如需为本课程定制培训,请联系我们进行安排。
简介
- OpenCL是什么?
- OpenCL vs CUDA vs 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数据类型、限定符、操作符和表达式
- 使用OpenCL C内置函数,如数学、几何、关系等
- 使用OpenCL C扩展和库,如atomic、image、cl_khr_fp16等
OpenCL内存模型
- 理解主机和设备内存模型的区别
- 使用OpenCL内存空间,如全局、局部、常量和私有
- 使用OpenCL内存对象,如缓冲区、图像和管道
- 使用OpenCL内存访问模式,如只读、只写、读写等
- 使用OpenCL内存一致性模型和同步机制
OpenCL执行模型
- 理解主机和设备执行模型的区别
- 使用OpenCL工作项、工作组和ND范围定义并行性
- 使用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循环展开和循环平铺技术减少控制开销并增加局部性
- 使用OpenCL局部内存和局部内存函数优化内存访问和带宽
- 使用OpenCL分析和分析工具测量并改进执行时间和资源利用率
总结与下一步
United Arab Emirates - GPU Programming with OpenCL
Qatar - GPU Programming with OpenCL
Egypt - GPU Programming with OpenCL
Saudi Arabia - GPU Programming with OpenCL
South Africa - GPU Programming with OpenCL
Brasil - GPU Programming with OpenCL
Canada - GPU Programming with OpenCL
中国 - GPU Programming with OpenCL
香港 - GPU Programming with OpenCL
澳門 - GPU Programming with OpenCL
台灣 - GPU Programming with OpenCL
USA - GPU Programming with OpenCL
Österreich - GPU Programming with OpenCL
Schweiz - GPU Programming with OpenCL
Deutschland - GPU Programming with OpenCL
Czech Republic - GPU Programming with OpenCL
Denmark - GPU Programming with OpenCL
Estonia - GPU Programming with OpenCL
Finland - GPU Programming with OpenCL
Greece - GPU Programming with OpenCL
Magyarország - GPU Programming with OpenCL
Ireland - GPU Programming with OpenCL
Luxembourg - GPU Programming with OpenCL
Latvia - GPU Programming with OpenCL
España - GPU Programming with OpenCL
Italia - GPU Programming with OpenCL
Lithuania - GPU Programming with OpenCL
Nederland - GPU Programming with OpenCL
Norway - GPU Programming with OpenCL
Portugal - GPU Programming with OpenCL
România - GPU Programming with OpenCL
Sverige - GPU Programming with OpenCL
Türkiye - GPU Programming with OpenCL
Malta - GPU Programming with OpenCL
Belgique - GPU Programming with OpenCL
France - GPU Programming with OpenCL
日本 - GPU Programming with OpenCL
Australia - GPU Programming with OpenCL
Malaysia - GPU Programming with OpenCL
New Zealand - GPU Programming with OpenCL
Philippines - GPU Programming with OpenCL
Singapore - GPU Programming with OpenCL
Thailand - GPU Programming with OpenCL
Vietnam - GPU Programming with OpenCL
India - GPU Programming with OpenCL
Argentina - GPU Programming with OpenCL
Chile - GPU Programming with OpenCL
Costa Rica - GPU Programming with OpenCL
Ecuador - GPU Programming with OpenCL
Guatemala - GPU Programming with OpenCL
Colombia - GPU Programming with OpenCL
México - GPU Programming with OpenCL
Panama - GPU Programming with OpenCL
Peru - GPU Programming with OpenCL
Uruguay - GPU Programming with OpenCL
Venezuela - GPU Programming with OpenCL
Polska - GPU Programming with OpenCL
United Kingdom - GPU Programming with OpenCL
South Korea - GPU Programming with OpenCL
Pakistan - GPU Programming with OpenCL
Sri Lanka - GPU Programming with OpenCL
Bulgaria - GPU Programming with OpenCL
Bolivia - GPU Programming with OpenCL
Indonesia - GPU Programming with OpenCL
Kazakhstan - GPU Programming with OpenCL
Moldova - GPU Programming with OpenCL
Morocco - GPU Programming with OpenCL
Tunisia - GPU Programming with OpenCL
Kuwait - GPU Programming with OpenCL
Oman - GPU Programming with OpenCL
Slovakia - GPU Programming with OpenCL
Kenya - GPU Programming with OpenCL
Nigeria - GPU Programming with OpenCL
Botswana - GPU Programming with OpenCL
Slovenia - GPU Programming with OpenCL
Croatia - GPU Programming with OpenCL
Serbia - GPU Programming with OpenCL
Bhutan - GPU Programming with OpenCL