Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Mastering Parallel programming with CUDA platform
Rating: 4.1 out of 5(1,878 ratings)
15,303 students

Mastering Parallel programming with CUDA platform

Unofficial guide to parallel programming on GPU's with CUDA from basic concepts to advance algorithm implementations.
Created byKasun Liyanage
Last updated 7/2025
English
EnglishSpanish [Auto],

What you'll learn

  • All the basic knowladge about CUDA programming
  • Ability to desing and implement optimized parallel algorithms
  • Basic work flow of parallel algorithm design
  • Advance CUDA concepts

Course content

8 sections83 lectures10h 47m total length
  • Very very important7:48

    Explore CUDA programming with a hands-on suite of sample projects in Visual Studio, and leverage CUDA toolkit documentation and the CUDA Zone community to solve real-world problems.

  • Introduction to parallel programming8:50

    Learn the fundamentals of parallel programming with CUDA, covering von Neumann architecture, processes and threads, context switching, and the difference between concurrency and true parallelism, including task- and data-level parallelism.

  • Parallel computing and Super computing7:19

    Explore how parallel computing powers supercomputing and why GPUs evolved as general purpose devices, comparing CPU and GPU design, throughput, and heterogeneous computing with examples Blue Gene and Sunway TaihuLight.

  • Let's investigate some background.
  • How to install CUDA toolkit and first look at CUDA program6:12

    Install the CUDA toolkit on your system and run your first CUDA program. Verify the toolkit with nvcc and explore a simple vector add kernel in a cuda project.

  • Basic elements of CUDA program16:50

    Learn the basic elements of a CUDA program, including host and device code, kernel launch, and dim3 grid and block configurations.

  • Organization of threads in a CUDA program - threadIdx8:38

    Explore how CUDA initializes threadIdx per thread block within 1D and 2D grids, showing x, y, z coordinates for each thread.

  • Organization of thread in a CUDA program - blockIdx,blockDim,gridDim6:14

    Explore how blockIdx, blockDim, and gridDim organize threads in a CUDA program, with dim3 coordinates and 1D and 2D grids, and see how values are printed per thread block.

  • Programming exercise 10:29

    Modify code from the previous video to print threadIdx, blockIdx, and gridDim for a 3d grid with four per dimension and a 2x2x2 block, then submit the main and kernel.

  • Unique index calculation using threadIdx blockId and blockDim9:20

    Compute unique global indices for each CUDA thread by combining threadIdx, blockIdx, and blockDim across 1D grids. Learn to access array elements with gid and verify with multi-block setups.

  • Unique index calculation for 2D grid 15:53

    Compute the global index for a 2D grid by combining row offset, block offset, and the thread id. Show 2D indexing with block and grid offsets to produce unique indices.

  • Unique index calculation for 2D grid 25:09

    Explore unique global index calculation for a 2d grid using 2d thread blocks and 2d grid, derive tid and offsets to enable consecutive memory access and uniquely index an array.

  • Memory transfer between host and device11:13

    Explore memory transfer between host memory and device memory in a CUDA program, using cudaMemCpy with hostToDevice and DeviceToHost, allocate with cudaMalloc, and cudaDeviceSynchronize() after computation.

  • Programming exercise 21:04

    Implement a cuda c++ exercise that transfers a 64-element array to the device, launches a 3d grid, computes a unique row-major index, and prints each value.

  • Sum array example with validity check9:13

    Learn to implement a CUDA parallel sum of two arrays using a 1D grid and 128 threads per block. Verify results with a CPU implementation to perform a validity check.

  • Sum array example with error handling4:32

    Learn how to handle runtime and compile-time errors in CUDA programs by using cudaError, cudaGetErrorString, and gpuErrorChk macros to check device operations and report errors, including kernel launches.

  • Sum array example with timing8:18

    Compare CPU and GPU execution times for a sum array by measuring clock cycles and memory transfer. Experiment with block sizes 128, 256, 512, 1024 to identify the best configuration.

  • Extend sum array implementation to sum up 3 arrays
  • Device properties5:30

    Query device properties with cudaGetDeviceProperties to read device name, major and minor compute capability, and total memory, then use these values to set max threads per block and grid limits.

  • Summary4:17

    Explore parallel programming with CUDA, explaining host and device roles, kernels, grids and blocks, memory transfers via cudaMemCpy, asynchronous kernel launches, cudaDeviceSynchronize, error handling, and performance timing.

Requirements

  • Basic C or C++ programming knowladge
  • How to use Visual studio IDE
  • CUDA toolkit
  • Nvidia GPU
  • You should be familiar with basic setup of a C++ project, how to change project properties etc

Description

This course is an in-depth, unofficial guide to parallel programming using GPU computing techniques with C++. We'll begin by exploring foundational concepts such as the GPU programming model, execution structure, and memory hierarchy. From there, you’ll dive into hands-on development, implementing advanced parallel algorithms optimized for high-performance graphics processors.


Since performance is at the heart of GPU-based computing, this course places a strong emphasis on optimization techniques. You’ll learn how to fine-tune your code for maximum speed and efficiency, and apply industry-standard tools for profiling and debugging, including nvprof, nvvp, memcheck, and GDB-based GPU debuggers.

The course includes the following core sections:

  • Introduction to GPU programming concepts and execution models

  • Understanding execution behavior on parallel processors

  • Deep dive into memory systems: global, shared, and constant memory

  • Using streams to manage concurrent execution

  • Fine-tuning instruction-level behavior for performance

  • Implementing real-world algorithms using GPU acceleration

  • Profiling and debugging tools overview

To reinforce learning, this course includes programming exercises and quizzes designed to help you internalize each concept.

This is the first course in a masterclass series on GPU-based parallel computing. The knowledge you gain here will form a strong foundation for exploring more advanced topics in future courses.

As GPUs continue to drive innovation in fields like AI and scientific computing, mastering these tools and techniques will set you apart in the tech industry.


Note: This course is not affiliated with or endorsed by NVIDIA Corporation. CUDA is a registered trademark of NVIDIA Corporation, used here solely for educational reference purposes.


Who this course is for:

  • Any one who wants to learn CUDA programming from scartch to intermidiate level