Get in Touch
 Duration 21 hours

Course Outline

Introduction

  • Defining GPU programming
  • Rationale for utilizing GPU programming
  • Challenges and trade-offs associated with GPU development
  • Overview of available frameworks and tools for GPU programming
  • Selecting the optimal framework and tool for specific applications

OpenCL

  • Introduction to OpenCL
  • Advantages and limitations 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 device-executed kernels using the OpenCL C language to manipulate data
  • Utilizing OpenCL built-in functions, variables, and libraries for common operations
  • Optimizing data transfers and memory access using 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 such as CodeXL
  • Enhancing OpenCL program performance through coalescing, caching, prefetching, and profiling

CUDA

  • Introduction to CUDA
  • Advantages and limitations of CUDA
  • Setting up the CUDA development environment
  • Creating a basic CUDA program for vector addition
  • Using the CUDA API to query device information, manage memory, copy data, launch kernels, and synchronize threads
  • Writing device-executed kernels using the CUDA C/C++ language to manipulate data
  • Leveraging CUDA built-in functions, variables, and libraries for standard tasks
  • Optimizing data flows using CUDA memory spaces (global, shared, constant, and local)
  • Managing parallelism through the CUDA execution model (threads, blocks, and grids)
  • Debugging and testing CUDA programs using CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight
  • Optimizing CUDA program performance via coalescing, caching, prefetching, and profiling

ROCm

  • Introduction to ROCm
  • Advantages and limitations of ROCm
  • Configuring the ROCm development environment
  • Developing 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 device-executed kernels using the ROCm C/C++ language to manipulate data
  • Utilizing ROCm built-in functions, variables, and libraries for common operations
  • Optimizing data transfers using ROCm memory spaces (global, local, constant, and private)
  • Controlling parallelism via the ROCm execution model (threads, blocks, and grids)
  • Debugging and testing ROCm programs using the ROCm Debugger and ROCm Profiler
  • Enhancing ROCm program performance through coalescing, caching, prefetching, and profiling

HIP

  • Introduction to HIP
  • Advantages and limitations of HIP
  • Setting up the HIP development environment
  • Creating a basic HIP program for vector addition
  • Writing device-executed kernels using the HIP language to manipulate data
  • Leveraging HIP built-in functions, variables, and libraries for standard tasks
  • Optimizing data flows using HIP memory spaces (global, shared, constant, and local)
  • Managing parallelism through the HIP execution model (threads, blocks, and grids)
  • Debugging and testing HIP programs using the ROCm Debugger and ROCm Profiler
  • Optimizing HIP program performance via coalescing, caching, prefetching, and profiling

Comparison

  • Comparing the features, performance characteristics, and compatibility of OpenCL, CUDA, ROCm, and HIP
  • Evaluating GPU programs through benchmarks and performance metrics
  • Learning best practices and strategic 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++ programming and parallel computing concepts
  • Foundational knowledge of computer architecture and memory hierarchy structures
  • Practical experience with command-line utilities and code editors

Target Audience

  • Developers aiming to acquire foundational knowledge of GPU programming and the key frameworks and tools for building GPU applications
  • Developers interested in writing portable and scalable code capable of running across different platforms and devices
  • Programmers looking to explore the potential benefits and technical challenges associated with GPU programming and optimization

Number of participants


Price per participant

Upcoming Courses

Related Categories