Get in Touch

Course Outline

Introduction

  • Defining GPU programming
  • The rationale behind using GPU acceleration
  • Key challenges and trade-offs in GPU development
  • Overview of available frameworks and tools
  • Strategies for selecting the right framework and tool for specific applications

OpenCL

  • An overview of OpenCL
  • Advantages and limitations of the OpenCL ecosystem
  • Configuring the OpenCL development environment
  • Developing a basic OpenCL program for vector addition
  • Using the OpenCL API to query device info, manage memory, handle host-device data transfers, launch kernels, and synchronize threads
  • Writing device-side kernels using the OpenCL C language
  • Leveraging OpenCL built-in functions, variables, and libraries for common operations
  • Optimizing performance by utilizing OpenCL memory spaces: global, local, constant, and private
  • Controlling parallelism via the OpenCL execution model: work-items, work-groups, and ND-ranges
  • Debugging and testing OpenCL programs with tools like CodeXL
  • Optimizing OpenCL code through coalescing, caching, prefetching, and profiling

CUDA

  • An overview of CUDA
  • Strengths and weaknesses of the CUDA platform
  • Setting up the CUDA development environment
  • Creating a basic CUDA program for vector addition
  • Utilizing the CUDA API for device queries, memory management, data copying, kernel launches, and thread synchronization
  • Writing kernels with CUDA C/C++ for device execution and data manipulation
  • Employing CUDA built-in functions, variables, and libraries for standard tasks
  • Optimizing data flow using CUDA memory spaces: global, shared, constant, and local
  • Managing parallelism via the CUDA execution model: threads, blocks, and grids
  • Debugging and testing CUDA applications using CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
  • Enhancing CUDA performance with coalescing, caching, prefetching, and profiling

ROCm

  • An overview of ROCm
  • Benefits and drawbacks of the ROCm stack
  • Preparing the ROCm development environment
  • Building a basic ROCm program for vector addition
  • Using the ROCm API to manage device info, memory, data transfers, kernel launches, and synchronization
  • Writing kernels with ROCm C/C++ for device-side data manipulation
  • Utilizing ROCm built-in functions, variables, and libraries for common operations
  • Optimizing performance via ROCm memory spaces: global, local, constant, and private
  • Controlling parallelism using the ROCm execution model: threads, blocks, and grids
  • Debugging and testing ROCm programs with the ROCm Debugger and ROCm Profiler
  • Optimizing ROCm code through coalescing, caching, prefetching, and profiling

HIP

  • An overview of HIP
  • Advantages and disadvantages of using HIP
  • Setting up the HIP development environment
  • Creating a basic HIP program for vector addition
  • Writing kernels using the HIP language for device execution and data manipulation
  • Utilizing HIP built-in functions, variables, and libraries for common tasks
  • Optimizing data access using HIP memory spaces: global, shared, constant, and local
  • Controlling parallelism via the HIP execution model: threads, blocks, and grids
  • Debugging and testing HIP programs using the ROCm Debugger and ROCm Profiler
  • Optimizing HIP code through coalescing, caching, prefetching, and profiling

Comparison

  • Comparing the features, performance, and compatibility of OpenCL, CUDA, ROCm, and HIP
  • Evaluating GPU applications using benchmarks and performance metrics
  • Adopting best practices and expert tips for effective GPU programming
  • Exploring current trends and future challenges in the GPU programming landscape

Summary and Next Steps

Requirements

  • Familiarity with C/C++ syntax and core parallel programming concepts
  • Foundational knowledge of computer architecture and memory hierarchy
  • Practical experience with command-line interfaces and code editors

Target Audience

  • Developers seeking to understand the fundamentals of GPU programming and the primary frameworks for building GPU applications
  • Engineers aiming to write portable, scalable code that can execute efficiently across different platforms and hardware devices
  • Programmers interested in exploring the advantages, constraints, and optimization strategies inherent in GPU programming
 21 Hours

Number of participants


Price per participant

Upcoming Courses

Related Categories