Get in Touch
 Duration 28 hours

Course Outline

Introduction

  • Defining GPU programming and its core principles.
  • The strategic advantages of adopting GPU programming.
  • Understanding the challenges and trade-offs involved in GPU development.
  • Overview of major GPU programming frameworks.
  • Criteria for selecting the most suitable framework for specific applications.

OpenCL

  • An in-depth look at OpenCL.
  • Analyzing the strengths and limitations of OpenCL.
  • Configuring the development environment for OpenCL.
  • Building a foundational OpenCL application for vector addition.
  • Utilizing the OpenCL API for device queries, memory management, data transfer, kernel launch, and thread synchronization.
  • Writing device-executed kernels and manipulating data using OpenCL C.
  • Leveraging OpenCL built-in functions, variables, and libraries for common operations.
  • Optimizing data transfers and memory access via OpenCL memory spaces (global, local, constant, private).
  • Controlling parallelism through the OpenCL execution model (work-items, work-groups, ND-ranges).
  • Debugging and testing OpenCL applications using tools like CodeXL.
  • Applying optimization techniques such as coalescing, caching, prefetching, and profiling to OpenCL code.

CUDA

  • Understanding the CUDA ecosystem.
  • Evaluating the benefits and drawbacks of using CUDA.
  • Setting up the CUDA development environment.
  • Developing a basic CUDA application for vector addition.
  • Using the CUDA API to manage device information, memory, data transfer, kernel execution, and synchronization.
  • Authoring kernels and manipulating data using the CUDA C/C++ language.
  • Utilizing CUDA built-in functions, variables, and libraries for standard tasks.
  • Optimizing performance using CUDA memory spaces (global, shared, constant, local).
  • Managing parallelism via the CUDA execution model (threads, blocks, grids).
  • Debugging and testing CUDA programs with tools like CUDA-GDB, CUDA-MEMCHECK, and NVIDIA Nsight.
  • Optimizing CUDA applications through coalescing, caching, prefetching, and profiling.

ROCm

  • Introduction to the ROCm platform.
  • Assessing the advantages and disadvantages of ROCm.
  • Configuring the development environment for ROCm.
  • Creating a basic ROCm application for vector addition.
  • Using the ROCm API for device queries, memory management, data transfer, kernel launch, and synchronization.
  • Writing kernels and manipulating data using the ROCm C/C++ language.
  • Employing ROCm built-in functions, variables, and libraries for common operations.
  • Optimizing data flow using ROCm memory spaces (global, local, constant, private).
  • Controlling parallelism through the ROCm execution model (threads, blocks, grids).
  • Debugging and testing ROCm programs using the ROCm Debugger and Profiler.
  • Applying optimization techniques such as coalescing, caching, prefetching, and profiling to ROCm code.

Comparative Analysis

  • Direct comparison of features, performance, and compatibility among OpenCL, CUDA, and ROCm.
  • Evaluating GPU program efficiency using benchmarks and key metrics.
  • 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

  • A solid understanding of C/C++ language constructs and parallel programming concepts.
  • Fundamental knowledge of computer architecture and memory hierarchies.
  • Proficiency with command-line interfaces and code editors.

Target Audience

  • Developers seeking to master multiple GPU programming frameworks and compare their functional capabilities, performance, and compatibility.
  • Engineers aiming to write portable and scalable code that runs seamlessly across diverse platforms and hardware devices.
  • Programmers interested in exploring the nuances, trade-offs, and optimization challenges inherent in GPU programming.

Number of participants


Price per participant (excl. VAT)

Upcoming Courses

Related Categories