Đề cương khóa học
Giới thiệu về Điện toán Tăng tốc bằng GPU
- Điện toán đa dạng (heterogeneous) và kiến trúc CPU-GPU
- Không gian thực thi và bộ nhớ của CUDA
- Biên dịch mã CUDA C++ với nvcc và CMake
- Xác minh môi trường phát triển GPU
Thuật toán Song song với Thrust và CUB
- Sắp xếp, giảm (reduce) và biến đổi được tăng tốc trên GPU
- Tái cấu trúc các thuật toán STL để thực thi trên GPU
- Các vector thiết bị (device vectors) của Thrust và các chính sách thực thi
- Các nguyên thủy toàn bộ thiết bị (device-wide primitives) của CUB cho các đường ống tùy chỉnh
Kiến trúc Bộ nhớ GPU và Quản lý
- Loại bộ nhớ toàn cục, hằng số và văn bản
- Thuộc và chuyển đổi bộ nhớ thiết bị một cách rõ ràng
- Unified Memory để truy cập dữ liệu đơn giản hơn
- Tối ưu hóa sự ghép kênh (coalescing) và mô hình truy cập bộ nhớ
Thực thi Bất đồng bộ với CUDA Streams
- Tạo và quản lý CUDA streams
- Trùng lặp quá trình thực thi kernel với việc truyền dữ liệu
- CUDA events để quản lý phụ thuộc
- Ưu tiên luồng và tinh chỉnh tính đồng thời
Viết các Kernel CUDA Tùy chỉnh
- Mô hình lập trình SIMT và thực thi warp
- Cấu hình khởi chạy kernel và vòng lặp lưới (grid-stride loops)
- Lập chỉ mục thread và lưới đa chiều
- Xử lý lỗi và kiểm tra API runtime của CUDA
Phân cấp Thread và Mô hình Thực thi
- Lưới (grids), khối (blocks) và thread trong mã thiết bị
- Các nguyên thủy cấp warp và các hoạt động bỏ phiếu (ballot)
- Đồng bộ hóa cấp khối và các hàng rào (barriers)
- Phân tích khả năng chiếm dụng và mức sử dụng tài nguyên
Cooperative Groups cho Tính Song song Linh hoạt
- API cooperative_groups và các loại nhóm
- Các khối tile (tiles) của thread block và tiled_partition
- Khởi chạy hợp tác cấp lưới
- Mô hình đồng bộ hóa đa lưới
Kỹ thuật Tối ưu hóa Bộ nhớ Chia sẻ
- Các ngân hàng bộ nhớ chia sẻ và tránh xung đột ngân hàng (bank conflict)
- Chiến lược tiling cho các phép toán ma trận
- Bộ nhớ chia sẻ như bộ đệm do người dùng quản lý
- cuda::shared_memory_mdspan cho các chế độ xem đa chiều
Kết hợp Kernel và Các Mẫu Song song Nâng cao
- Kết hợp nhiều kernel để giảm chi phí khởi chạy
- Thuật toán scan, reduce-by-key và theo từng phần (segmented)
- Các hoạt động nguyên tử và cấu trúc dữ liệu không khóa (lock-free)
- Các hoạt động nguyên tử nhóm warp để tăng thông lượng
Phân tích Hiệu năng và Tối ưu hóa với Nsight Systems
- Phân tích dòng thời gian của hoạt động CPU và GPU
- Xác định các nút thắt cổ chai trong truyền dữ liệu bộ nhớ
- Phân tích hiệu suất và khả năng chiếm dụng kernel
- Tối ưu hóa lặp lại với Nsight Compute
Các Đặc điểm C++ Hiện đại trong Mã Thiết bị CUDA
- Lambdas, constexpr và auto trong kernels
- Thuật toán song song C++17 và các chính sách thực thi
- Các khái niệm (concepts) và phạm vi ranges của C++20 trên thiết bị
- Hỗ trợ C++23 trong nvcc và CCCL 3.x
CUDA Graphs và Tính Bất đồng bộ Nâng cao
- Xác định và khởi chạy CUDA graphs
- Ghi đồ thị từ việc thực thi luồng (stream execution)
- Cập nhật đồ thị và các nút thực thi điều kiện
- Giảm độ trễ khởi chạy cho các tác vụ lặp lại
Mẫu Tích hợp cho Ứng dụng Hiện có
- Đưa mã GPU vào sau các giao diện C++
- Quản lý hệ thống đa GPU và NUMA
- Tích hợp hệ thống build với CMake và CUDA
- Gỡ lỗi mã thiết bị bằng cuda-gdb
Tổng kết và Các Thực tiễn Tốt nhất
- Chọn giữa Thrust, CUB và các kernel tùy chỉnh
- Khả năng di chuyển hiệu năng giữa các kiến trúc GPU khác nhau
- Tổ chức mã code và RAII cho tài nguyên CUDA
- Các bước tiếp theo và lộ trình học tập CUDA nâng cao
Yêu cầu
- Kỹ năng C++ cơ bản bao gồm biểu thức lambda, templates và STL
- Hiểu biết về các thuật toán tiêu chuẩn, containers (tập hợp) và iterators (trình duyệt)
- Thành thạo với vòng lặp, điều kiện và hàm
- Không yêu cầu kiến thức trước về CUDA hoặc lập trình GPU
Đối tượng tham gia
- Các nhà phát triển C++ muốn tăng tốc các ứng dụng nặng tính toán bằng GPU
- Kỹ sư phần mềm chuyển đổi từ lập trình song song đa dạng (heterogeneous) chỉ chạy trên CPU sang sử dụng GPU
- Kỹ sư tối ưu hóa hiệu năng và nhà phát triển định lượng làm việc với tập dữ liệu lớn
Đánh giá (3)
Giải thích chi tiết, lặp lại các điểm một cách tinh tế giúp kiến thức thấm sâu. Sự sẵn lòng của Rod trong việc kiểm tra lại những câu hỏi khó hiểu mà chúng tôi đặt ra để đảm bảo rằng câu trả lời của anh ấy hoàn toàn chính xác. Ngoài ra, sự quan tâm của anh ấy trong việc thảo luận về ưu và nhược điểm của các phong cách lập trình khác nhau giúp chúng tôi không chỉ học cách sử dụng C++ theo cách dự định, mà còn hiểu tại sao nên làm như vậy.
Nick Dillon - cellxica Ltd
Khóa học - Using C++ in Embedded Systems - Applying C++11/C++14
Dịch thuật bằng máy
Kinh nghiệm chia sẻ, đó là kiến thức và sự quý giá của người thầy.
Carey Fan - Logitech
Khóa học - C/C++ Secure Coding
Dịch thuật bằng máy
Việc diễn ra trực tuyến đã giúp chúng tôi tiết kiệm được rất nhiều thời gian. Điều này rất đáng trân trọng. Ngoài ra, việc giáo viên thông thạo cả C# và C++ là một sự hỗ trợ lớn, vì ông có thể giải thích mọi thứ dựa trên kiến thức mà chúng tôi đã có.
Gabor - Rheinmetall Electronics Hungary Kft
Khóa học - Advanced C++
Dịch thuật bằng máy