inflearn logo

Nhập môn lập trình CUDA

GPGPU không còn là một công nghệ xa lạ nữa. Từ lâu, nó đã được ứng dụng trong nhiều lĩnh vực đa dạng như tính toán khoa học, mô phỏng, xử lý đồ họa, và ngày nay, nó đã trở thành nền tảng cốt lõi quyết định hiệu suất của công nghệ AI. Trong xu thế đó, năng lực lập trình GPU trở thành một công cụ mạnh mẽ giúp mở rộng trình độ của nhà phát triển lên một tầm cao mới. Vượt ra ngoài việc phát triển tập trung vào CPU, khả năng trực tiếp xử lý các phép toán song song quy mô lớn đồng nghĩa với việc sở hữu phương thức giải quyết vấn đề mới và khả năng phát triển rộng mở hơn. Khóa học này sẽ truyền tải một cách hệ thống từ cơ bản đến thực tiễn về lập trình CUDA - tiêu chuẩn thực tế của GPGPU. Với nội dung tập trung vào những kiến thức có thể áp dụng ngay vào thực tế như hiểu cấu trúc GPU, mô hình lập trình song song, tối ưu hóa bộ nhớ, viết Kernel, khóa học hướng tới mục tiêu giúp học viên có thể tự mình thiết kế và triển khai các chương trình dựa trên GPU sau khi hoàn thành.

11 học viên đang tham gia khóa học này

Độ khó Trung cấp trở lên

Thời gian Không giới hạn

C++
C++
CUDA
CUDA
gpgpu
gpgpu
C++
C++
CUDA
CUDA
gpgpu
gpgpu

Bạn sẽ nhận được điều này sau khi học.

  • Khả năng lập trình song song CUDA - Hiểu rõ cấu trúc luồng GPU, phân cấp bộ nhớ, mô hình thực thi kernel và có thể trực tiếp viết các CUDA kernel.

  • Mã tăng tốc tính toán nhanh hơn hàng chục đến hàng trăm lần so với CPU - Bạn có thể trực tiếp kiểm tra sự khác biệt về hiệu suất bằng cách viết các chương trình tăng tốc các phép toán thực tế như phép toán vectơ, nhân ma trận bằng GPU.

Mở rộng năng lực phát triển với CUDA, bắt đầu lập trình GPUKhóa học nhập môn GPGPU dành cho nhà phát triển C/C++

Lập trình GPU không còn là đặc quyền của riêng một lĩnh vực đặc biệt nào nữa. Giờ đây, GPU đang đóng vai trò cốt lõi trong hầu hết mọi lĩnh vực như AI, mô phỏng, xử lý hình ảnh, tính toán khoa học, và khả năng làm chủ nó sẽ trở thành vũ khí mạnh mẽ giúp mở rộng đáng kể năng lực cạnh tranh của nhà phát triển. Khóa học này được chuẩn bị dành cho những nhà phát triển đã có kinh nghiệm với C/C++ nhưng còn xa lạ với lập trình GPU nên chưa tự tin bắt đầu. Chúng ta sẽ cùng tìm hiểu trọng tâm vào thực hành, từ các khái niệm cơ bản của CUDA đến việc hiểu cấu trúc GPU, mô hình lập trình song song, tối ưu hóa bộ nhớ, viết Kernel, sử dụng Stream và xử lý hình ảnh. Sau khi hoàn thành khóa học, bạn sẽ có thể tự mình thiết kế và triển khai các chương trình dựa trên GPU.

Bạn sẽ học được những nội dung này

1. Tổng quan về CUDA

Chúng ta sẽ cùng tìm hiểu về quá trình phát triển của GPU từ một thiết bị chuyên dụng cho đồ họa trở thành GPGPU thực hiện các tính toán đa mục đích, đồng thời giải thích tổng quát các khái niệm cốt lõi về phần cứng và phần mềm cần thiết để hiểu về lập trình CUDA. Chương này sẽ đề cập nhẹ nhàng các kiến thức cơ bản cho việc thực hành sau này như cấu trúc GPU, phương pháp xử lý song song và mô hình thực thi CUDA.


2. Cài đặt và thiết lập môi trường

Khó khăn lớn nhất mà mọi người thường gặp phải khi bắt đầu phát triển CUDA chính là thiết lập môi trường ban đầu. Trong chương này, chúng tôi sẽ hướng dẫn từng bước toàn bộ môi trường cần thiết cho việc phát triển, từ cài đặt CUDA Toolkit đến thiết lập trình biên dịch và cấu hình IDE. Chúng tôi sẽ giải thích cách xây dựng môi trường phát triển thực tế để có thể chạy và gỡ lỗi các ví dụ trong các chương tiếp theo.


3. Cơ bản về lập trình CUDA

Giải thích luồng hoạt động cơ bản của chương trình CUDA. Xem xét quá trình xử lý khởi tạo và kết thúc môi trường CUDA, đồng thời giải thích từng bước cấu trúc thực thi tổng thể dẫn dắt từ sao chép host memory → device memory, thực thi kernel, đến sao chép device memory → host memory. Ngoài ra, tài liệu cũng tổng hợp các khái niệm thiết yếu làm nền tảng cho các bài thực hành sau này như cách gọi CUDA kernel và cách sử dụng các API CUDA cốt lõi.


4. Global Memory Coalescing

Nội dung này đề cập đến khái niệm global memory coalescing, một yếu tố then chốt trong việc tối ưu hóa hiệu suất GPU. Chúng tôi sẽ giải thích cách các yêu cầu được hợp nhất (coalesce) về mặt phần cứng khi các luồng (thread) truy cập vào bộ nhớ toàn cục, đồng thời so sánh sự khác biệt giữa các mẫu truy cập tối ưu và tệ nhất thông qua các kịch bản thực tế. Ngoài ra, tài liệu cũng tổng hợp các chiến lược sắp xếp dữ liệu và phương pháp cấu hình luồng để tối đa hóa hiệu suất truy cập bộ nhớ, qua đó giải thích các kỹ thuật tối ưu hóa thiết yếu để viết các CUDA kernel hiệu quả.


5. Sự phối hợp giữa các Thread trong một Block

Phần này đề cập đến cách các luồng (thread) trong một khối (block) cộng tác với nhau để đạt được hiệu suất cao hơn. Chúng tôi sẽ giải thích cách chia sẻ dữ liệu hiệu quả theo đơn vị khối bằng cách sử dụng Shared Memory, sau đó giới thiệu các kỹ thuật thực hiện cộng tác giữa các luồng trong một warp bằng cách sử dụng warp level intrinsic. Nội dung cũng bao gồm chiến lược kết hợp hai phương thức cộng tác này để viết các nhân (kernel) CUDA tối ưu hơn, đồng thời thực hiện quy trình tìm giá trị nhỏ nhất bằng cách sử dụng warp-level reductionblock-level reduction làm ví dụ thực tế.


6. Shared Memory - MatrixTranspose

Thông qua quá trình chuyển vị (transpose) ma trận trong CUDA, bạn sẽ nắm vững các khái niệm cốt lõi về việc sử dụng Shared Memory. Chúng ta sẽ xem xét các mẫu truy cập bộ nhớ global không hiệu quả thường xảy ra trong các phép toán chuyển vị và các trường hợp giảm hiệu suất do chúng gây ra, đồng thời giải thích cách tối ưu hóa truy cập bộ nhớ bằng cách sử dụng Shared Memory. Ngoài ra, tài liệu cũng đề cập đến các kỹ thuật để giải quyết vấn đề bank conflicts có thể phát sinh trong Shared Memory, giúp bạn học hỏi các chiến lược thực tế để sử dụng Shared Memory hiệu quả thông qua ví dụ chuyển vị ma trận.


7. Shared Memory - MatrixMultiply

Tiếp nối ví dụ về chuyển vị ma trận (Transpose), chúng ta sẽ tìm hiểu cách sử dụng Shared Memory hiệu quả hơn thông qua ví dụ về nhân ma trận (Matrix Multiplication). Nội dung này giải thích cấu trúc cơ bản để xử lý nhân ma trận quy mô lớn trong CUDA và giới thiệu kỹ thuật chia nhỏ ma trận lớn thành các ma trận con theo đơn vị ô (tile) để tính toán. Ngoài ra, chúng ta cũng sẽ so sánh các mẫu truy cập bộ nhớ của nhân ma trận - vốn có điểm tương đồng nhưng cũng khác biệt với chuyển vị ma trận, đồng thời đề cập đến chiến lược sử dụng Shared Memory để giảm nghẽn cổ chai truy cập bộ nhớ và tối đa hóa hiệu suất.


8. Occupancy

Nội dung này đề cập đến cách nâng cao hiệu suất GPU dưới góc độ lập lịch warp (warp scheduling) thay vì tối ưu hóa truy cập bộ nhớ. Giải thích occupancy là gì và tại sao khả năng thực thi đồng thời bao nhiêu warp của GPU lại quan trọng. Chúng ta sẽ tìm hiểu các chiến lược điều chỉnh cấu hình luồng (thread), lượng sử dụng thanh ghi (register) và bộ nhớ dùng chung (Shared Memory) để tăng occupancy, đồng thời so sánh giữa trường hợp hiệu suất tốt khi occupancy caotrường hợp hiệu suất bị giảm mặc dù occupancy cao.


9. cuda Stream

Chúng tôi sẽ đề cập đến khái niệm cuda stream, cho phép thực thi không đồng bộ trong CUDA. Trước tiên, chúng ta sẽ tìm hiểu cách hoạt động của default stream, vốn được sử dụng ngầm định trong tất cả các chương trình CUDA, sau đó giải thích cách cải thiện hiệu suất tổng thể bằng cách sử dụng nhiều stream để thực thi chồng lấp giữa tính toán và sao chép bộ nhớ. Ngoài ra, chúng tôi cũng sẽ sử dụng Nsight Systems để phân tích những lợi thế về hiệu suất mà việc thực thi không đồng bộ dựa trên stream thực sự mang lại.


10. Bộ lọc hình ảnh (Image Filter)

Giới thiệu khái niệm bộ lọc hạt nhân (kernel filter) được sử dụng rộng rãi trong xử lý hình ảnh, đồng thời trực tiếp triển khai bộ lọc Gaussian và bộ lọc Laplacian bằng CUDA để học các kỹ năng cơ bản về xử lý hình ảnh dựa trên GPU.
Giải thích cách nâng cao hiệu quả truy cập bộ nhớ bằng cách tận dụng Texture Memory và Shared Memory, đồng thời phân tích so sánh sự khác biệt về hiệu suất thực tế trên phần cứng khi triển khai cùng một thuật toán với các cấu trúc bộ nhớ khác nhau.


11. Biểu đồ tần suất hình ảnh (Image Histogram)

Chúng tôi sẽ triển khai biểu đồ tần suất (histogram) để phân tích sự phân bổ pixel của hình ảnh bằng CUDA, đồng thời giải quyết phương pháp tích lũy dữ liệu trong môi trường song song và các vấn đề hiệu suất liên quan. Chúng tôi sẽ xem xét cấu trúc cơ bản của việc tính toán histogram trong CUDA và giải thích nguyên lý hoạt động cũng như vấn đề giảm hiệu suất của atomic operation vốn xuất hiện tất yếu trong quá trình này. Tiếp theo, chúng tôi sẽ đề cập đến các kỹ thuật tối ưu hóa để giảm nghẽn cổ chai của các phép toán atomic bằng cách sử dụng Shared Memory và warp intrinsic, từ đó viết các kernel tính toán histogram hiệu quả hơn.


12. Tương tác CUDA-D3D12

Nội dung này đề cập đến cách kết hợp đường ống đồ họa (rendering pipeline) của Direct3D 12 với CUDA để tận dụng đồng thời đồ họa GPU và tính toán GPGPU. Giải thích cách ánh xạ Render Target và Depth Buffer của một khung làm việc (framework) trò chơi D3D12 đơn giản thành tài nguyên CUDA, cũng như cách đồng bộ hóa Timeline của D3D12 và Timeline của CUDA.
Mã ví dụ thực hiện chức năng nhận các kết cấu (textures) đã được ánh xạ thành tài nguyên CUDA làm đầu vào, áp dụng nhiều quy trình xử lý hình ảnh khác nhau như Gaussian Blur, trích xuất cạnh (edge detection), kết xuất bản đồ pháp tuyến (normal map rendering), trực quan hóa giá trị độ sâu, và xuất ra màn hình cuối cùng.


Lưu ý trước khi khóa học bắt đầu

Môi trường thực hành

  • Hệ điều hành và phiên bản (OS): Windows 10/11

  • Công cụ sử dụng: Visual Studio 2026

  • cuda Toolkit 13.2

  • nvidia GPU


Tài liệu học tập

  • Cung cấp file PDF

  • Cung cấp mã nguồn thông qua tệp đính kèm

Kiến thức tiên quyết

  • Bắt buộc

    • C/C++

    • Lập trình Windows cơ bản

  • Khuyến nghị (Các bài giảng sau đây có thể sẽ hữu ích.)

Lưu ý

  • Cần có card đồ họa từ dòng GTX1600 trở lên.

  • Bạn cũng có thể chạy các ví dụ trên dòng card đồ họa GTX 1000 series, nhưng cần phải sửa đổi cài đặt dự án một chút. Cách sửa đổi sẽ được đề cập trong chương 'Cài đặt và thiết lập môi trường phát triển'.

  • Bạn cũng có thể sử dụng CUDA Toolkit phiên bản mới nhất từ 13.3 trở lên. Tuy nhiên, bạn cần phải chỉnh sửa cài đặt dự án một chút. Cách chỉnh sửa sẽ được đề cập trong phần 'Cài đặt và thiết lập môi trường phát triển'.

  • Khóa học này không đề cập đến công nghệ AI. Mặc dù các phép nhân ma trận hay áp dụng bộ lọc kernel có liên quan đến công nghệ AI, nhưng khóa học không trực tiếp xử lý các công nghệ AI đó.


Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Lập trình viên chưa có kinh nghiệm về đồ họa nên còn e ngại về lập trình GPU nhưng muốn tận dụng tính toán song song.

  • Nhà phát triển muốn trực tiếp tăng tốc AI, mô phỏng và tính toán khoa học

Cần biết trước khi bắt đầu?

  • C/C++

  • Lập trình Windows cơ bản sử dụng Visual Studio

Xin chào
Đây là megayuchi

Xác minh Inflearn

Xác minh sự nghiệp

3,307

Học viên

95

Đánh giá

22

Trả lời

5.0

Xếp hạng

11

Các khóa học

Lập trình viên

C++,x86/x64 ASM, DirectX9/11/12, Metal, OpenGL, CUDA, win32, winsock/bsd socket

 

Các khóa học trên Inflearn

D3D12프로그래밍 기초편 - https://inf.run/7gJhS

Lập trình D3D12 Cơ bản Plus - https://inf.run/itHDW

Lập trình DirectX Raytracing - https://inf.run/cQqx7

Lập trình Hệ thống Windows - https://inf.run/AwfCv

Mẹo gỡ lỗi Windows - https://inf.run/zL7E4

 

Blog : https://megayuchi.com

Youtube : https://youtube.com/megayuchi

LinkedIn : https://www.linkedin.com/in/megayuchi/

 

 

Thêm

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của megayuchi

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Giảm 25% cho thành viên mới

3.442.961 ₫

25%

4.590.621 ₫