Course Code: gpuprogopencl
Duration: 28 hours
Prerequisites:
  • 理解C/C++语言和并行编程概念
  • 具备计算机架构和内存层次结构的基础知识
  • 有使用命令行工具和代码编辑器的经验

受众

  • 希望学习如何使用OpenCL编程异构设备并利用其并行性的开发者
  • 希望编写可移植且可扩展代码的开发者,代码能够在不同平台和设备上运行
  • 希望探索异构编程的低层细节并优化代码性能的程序员
Overview:

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 程序。

课程形式

  • 互动讲座和讨论。
  • 大量练习和实践。
  • 在实验室环境中进行实际操作。

课程定制选项

  • 如需为本课程定制培训,请联系我们进行安排。
Course Outline:

简介

  • 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分析和分析工具测量并改进执行时间和资源利用率

总结与下一步

Sites Published:

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

Nepal - GPU Programming with OpenCL

Uzbekistan - GPU Programming with OpenCL