Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Duration 28 hours
Course Outline
Introduction
- Overview of ROCm
- Introduction to HIP
- Comparison: ROCm vs. CUDA vs. OpenCL
- Architecture and key features of ROCm and HIP
- Configuring the Development Environment
Getting Started
- Initializing a new ROCm project in Visual Studio Code
- Exploring project structure and file organization
- Compiling and executing the program
- Displaying output via printf and fprintf
ROCm API
- The role of the ROCm API within the host program
- Querying device information and capabilities using the ROCm API
- Allocating and freeing device memory via the ROCm API
- Transferring data between host and device using the ROCm API
- Launching kernels and synchronizing threads with the ROCm API
- Handling errors and exceptions using the ROCm API
HIP Language
- The role of the HIP language within the device program
- Writing GPU-executable kernels in HIP for data manipulation
- Utilizing HIP data types, qualifiers, operators, and expressions
- Employing HIP built-in functions, variables, and libraries for common operations
ROCm and HIP Memory Model
- Distinguishing between host and device memory models
- Working with ROCm and HIP memory spaces: global, shared, constant, and local
- Managing ROCm and HIP memory objects such as pointers, arrays, textures, and surfaces
- Applying ROCm and HIP memory access modes, including read-only, write-only, and read-write
- Understanding the ROCm and HIP memory consistency model and synchronization mechanisms
ROCm and HIP Execution Model
- Distinguishing between host and device execution models
- Defining parallelism using ROCm and HIP threads, blocks, and grids
- Utilizing ROCm and HIP thread functions, e.g., hipThreadIdx_x, hipBlockIdx_x, hipBlockDim_x
- Using ROCm and HIP block functions, e.g., __syncthreads, __threadfence_block
- Applying ROCm and HIP grid functions, e.g., hipGridDim_x, hipGridSync, and cooperative groups
Debugging
- Identifying common errors and bugs in ROCm and HIP programs
- Inspecting variables, breakpoints, and call stacks using the Visual Studio Code debugger
- Debugging ROCm and HIP programs on AMD devices with the ROCm Debugger
- Analyzing ROCm and HIP programs on AMD devices using the ROCm Profiler
Optimization
- Factors influencing the performance of ROCm and HIP programs
- Enhancing memory throughput with ROCm and HIP coalescing techniques
- Reducing memory latency via ROCm and HIP caching and prefetching methods
- Optimizing memory access and bandwidth using ROCm and HIP shared and local memory strategies
- Measuring and improving execution time and resource utilization with ROCm and HIP profiling tools
Summary and Next Steps
Requirements
- Familiarity with the C/C++ language and parallel programming principles
- Fundamental knowledge of computer architecture and memory hierarchy
- Proficiency with command-line interfaces and code editors
Target Audience
- Developers seeking to master the use of ROCm and HIP for programming AMD GPUs and leveraging their parallelism
- Engineers aiming to write high-performance, scalable code compatible with various AMD devices
- Programmers interested in exploring the low-level aspects of GPU programming to enhance code performance