Get in Touch

Course Outline

Introduction

  • Overview of GPU programming
  • Benefits and use cases for GPU programming
  • Understanding the challenges and trade-offs involved in GPU programming
  • The landscape of GPU programming frameworks
  • Selecting the appropriate framework for your application

OpenCL

  • Introduction to OpenCL
  • Advantages and disadvantages of using OpenCL
  • Setting up the OpenCL development environment
  • Creating a basic OpenCL program to perform vector addition
  • Using the OpenCL API to query device info, manage device memory, transfer data, launch kernels, and synchronize threads
  • Writing kernels using the OpenCL C language to execute on the device and manipulate data
  • Utilizing OpenCL built-in functions, variables, and libraries for common tasks
  • Leveraging OpenCL memory spaces (global, local, constant, private) to optimize data transfers and access
  • Using the OpenCL execution model to control work-items, work-groups, and ND-ranges for parallelism
  • Debugging and testing OpenCL programs with tools like CodeXL
  • Optimizing OpenCL programs through coalescing, caching, prefetching, and profiling

CUDA

  • Introduction to CUDA
  • Advantages and disadvantages of using CUDA
  • Setting up the CUDA development environment
  • Creating a basic CUDA program for vector addition
  • Using the CUDA API to query device info, manage device memory, transfer data, launch kernels, and synchronize threads
  • Writing kernels using CUDA C/C++ to execute on the device and manipulate data
  • Utilizing CUDA built-in functions, variables, and libraries for common operations
  • Leveraging CUDA memory spaces (global, shared, constant, local) to optimize data transfers and access
  • Using the CUDA execution model to control threads, blocks, and grids for parallelism
  • Debugging and testing CUDA programs with tools like CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
  • Optimizing CUDA programs via coalescing, caching, prefetching, and profiling

ROCm

  • Introduction to ROCm
  • Advantages and disadvantages of using ROCm
  • Setting up the ROCm development environment
  • Creating a basic ROCm program for vector addition
  • Using the ROCm API to query device info, manage device memory, transfer data, launch kernels, and synchronize threads
  • Writing kernels using ROCm C/C++ to execute on the device and manipulate data
  • Utilizing ROCm built-in functions, variables, and libraries for common tasks
  • Leveraging ROCm memory spaces (global, local, constant, private) to optimize data transfers and access
  • Using 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 using coalescing, caching, prefetching, and profiling

Comparison

  • Comparing the features, performance, and compatibility of OpenCL, CUDA, and ROCm
  • Evaluating GPU program efficiency using benchmarks and metrics
  • Key best practices and tips for effective GPU programming
  • Exploring current trends and future challenges in GPU programming

Summary and Next Steps

Requirements

  • A solid understanding of C/C++ language and parallel programming concepts
  • Fundamental knowledge of computer architecture and memory hierarchy
  • Familiarity with command-line tools and code editors

Target Audience

  • Developers seeking to master different GPU programming frameworks and compare their features, performance, and compatibility
  • Developers aiming to write portable and scalable code capable of running across various platforms and devices
  • Programmers interested in exploring the trade-offs and challenges associated with GPU programming and optimization
 28 Hours

Number of participants


Price per participant

Upcoming Courses

Related Categories