Get in Touch

Course Outline

Introduction

  • Understanding GPU programming
  • Rationale for utilizing GPU programming
  • Challenges and trade-offs associated with GPU programming
  • Overview of frameworks available for GPU programming
  • Selecting the appropriate framework for specific applications

OpenCL

  • Defining OpenCL
  • Pros and cons of using OpenCL
  • Configuring the development environment for OpenCL
  • Creating 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 device-executing kernels with the OpenCL C language
  • Utilizing OpenCL built-in functions, variables, and libraries for common operations
  • Optimizing data transfer and memory access via OpenCL memory spaces (global, local, constant, private)
  • Managing parallelism through the OpenCL execution model (work-items, work-groups, ND-ranges)
  • Debugging and testing OpenCL programs using CodeXL
  • Optimizing OpenCL programs via coalescing, caching, prefetching, and profiling

CUDA

  • Defining CUDA
  • Advantages and limitations of CUDA
  • Configuring the development environment for CUDA
  • Creating a basic CUDA program for vector addition
  • Using the CUDA API to query device details, manage memory, transfer data, launch kernels, and synchronize threads
  • Writing device-executing kernels with CUDA C/C++
  • Utilizing CUDA built-in functions, variables, and libraries for common operations
  • Optimizing data transfer and memory access via CUDA memory spaces (global, shared, constant, local)
  • Managing parallelism through the CUDA execution model (threads, blocks, grids)
  • Debugging and testing CUDA programs using CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
  • Optimizing CUDA programs via coalescing, caching, prefetching, and profiling

ROCm

  • Defining ROCm
  • Advantages and limitations of ROCm
  • Configuring the development environment for ROCm
  • Creating a basic ROCm program for vector addition
  • Using the ROCm API to query device details, manage memory, transfer data, launch kernels, and synchronize threads
  • Writing device-executing kernels with ROCm C/C++
  • Utilizing ROCm built-in functions, variables, and libraries for common operations
  • Optimizing data transfer and memory access via ROCm memory spaces (global, local, constant, private)
  • Managing parallelism through the ROCm execution model (threads, blocks, grids)
  • Debugging and testing ROCm programs using ROCm Debugger and ROCm Profiler
  • Optimizing ROCm programs via coalescing, caching, prefetching, and profiling

Comparison

  • Comparing features, performance, and compatibility among OpenCL, CUDA, and ROCm
  • Evaluating GPU programs through benchmarks and metrics
  • Learning best practices and tips for GPU programming
  • Exploring current and future trends and challenges in GPU programming

Summary and Next Steps

Requirements

  • Proficiency in C/C++ programming and parallel computing concepts
  • Fundamental knowledge of computer architecture and memory hierarchy
  • Experience using command-line interfaces and code editors

Target Audience

  • Developers looking to master multiple GPU programming frameworks and evaluate their features, performance, and compatibility.
  • Developers aiming to write portable, scalable code capable of running across various platforms and devices.
  • Programmers interested in exploring the trade-offs and challenges inherent in GPU programming and optimization.
 28 Hours

Number of participants


Price per participant

Provisional Upcoming Courses (Require 5+ participants)

Related Categories