Get in Touch

Course Outline

Introduction

  • Defining GPU programming.
  • The rationale for using GPU programming.
  • Challenges and trade-offs inherent to GPU programming.
  • Overview of available GPU programming frameworks.
  • Selecting the optimal framework for your application.

OpenCL

  • Understanding OpenCL.
  • Pros and cons of OpenCL.
  • Configuring the OpenCL development environment.
  • Developing a basic OpenCL program for vector addition.
  • Using the OpenCL API to query device details, manage memory, transfer data, launch kernels, and synchronize threads.
  • Writing kernels in OpenCL C to execute on the device and manipulate data.
  • Leveraging OpenCL built-in functions, variables, and libraries for common operations.
  • Utilizing OpenCL memory spaces (global, local, constant, private) to optimize data transfers and memory access.
  • Applying the OpenCL execution model to manage work-items, work-groups, and ND-ranges for parallelism.
  • Debugging and testing OpenCL programs with tools like CodeXL.
  • Optimizing OpenCL programs via coalescing, caching, prefetching, and profiling.

CUDA

  • Understanding CUDA.
  • Pros and cons of CUDA.
  • Setting up the CUDA development environment.
  • Creating a basic CUDA program for vector addition.
  • Utilizing the CUDA API to query device information, manage memory, copy data, launch kernels, and synchronize threads.
  • Writing kernels in CUDA C/C++ to execute on the device and manipulate data.
  • Using CUDA built-in functions, variables, and libraries for standard tasks.
  • Employing CUDA memory spaces (global, shared, constant, local) to optimize data transfers and memory access.
  • Applying the CUDA execution model to control threads, blocks, and grids for parallelism.
  • Debugging and testing CUDA programs with tools such as CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight.
  • Optimizing CUDA programs using coalescing, caching, prefetching, and profiling.

ROCm

  • Understanding ROCm.
  • Pros and cons of ROCm.
  • Configuring the ROCm development environment.
  • Creating a basic ROCm program for vector addition.
  • Using the ROCm API to query device information, manage memory, transfer data, launch kernels, and synchronize threads.
  • Writing kernels in ROCm C/C++ to execute on the device and manipulate data.
  • Leveraging ROCm built-in functions, variables, and libraries for common operations.
  • Utilizing ROCm memory spaces (global, local, constant, private) to optimize data transfers and memory access.
  • Applying the ROCm execution model to control threads, blocks, and grids for parallelism.
  • Debugging and testing ROCm programs with tools like the ROCm Debugger and ROCm Profiler.
  • Optimizing ROCm programs via coalescing, caching, prefetching, and profiling.

Comparison

  • Comparing the features, performance, and compatibility of OpenCL, CUDA, and ROCm.
  • Assessing GPU programs through benchmarks and metrics.
  • Adopting best practices and tips for effective GPU programming.
  • Exploring current and future trends and challenges in GPU programming.

Summary and Next Steps

Requirements

  • Proficiency in the C/C++ language and concepts of parallel programming.
  • Fundamental understanding of computer architecture and memory hierarchy.
  • Familiarity with command-line tools and code editors.

Target Audience

  • Developers seeking to master various GPU programming frameworks and compare their features, performance, and compatibility.
  • Developers aiming to write portable and scalable code compatible with diverse platforms and devices.
  • Programmers looking to investigate the trade-offs and challenges associated with GPU programming and optimization.
 28 Hours

Number of participants


Price per participant

Upcoming Courses

Related Categories