Hướng dẫn Lập trình CUDA
Tài nguyên chính thức, toàn diện dành cho các nhà phát triển để học mô hình lập trình CUDA và cách viết mã hiệu suất cao chạy trên GPU của NVIDIA. Hướng dẫn này bao gồm kiến trúc nền tảng, giao diện lập trình, các tính năng phần cứng nâng cao và thông số kỹ thuật kỹ thuật.
Bài học
Tổng quan khóa học
📚 Tóm tắt nội dung
Tài liệu chính thức, toàn diện dành cho các nhà phát triển để học mô hình lập trình CUDA và cách viết mã hiệu suất cao chạy trên GPU NVIDIA. Hướng dẫn này bao gồm kiến trúc nền tảng, giao diện lập trình, các tính năng phần cứng nâng cao và thông số kỹ thuật kỹ thuật.
Thành thạo nghệ thuật tính toán song song với hướng dẫn chuẩn ngành về NVIDIA CUDA.
Tác giả: Công ty NVIDIA
Ghi nhận: Bản quyền © 2007–2024 Công ty NVIDIA và các công ty liên kết. Mọi quyền được bảo lưu.
🎯 Mục tiêu học tập
- Xác định vai trò của thiết bị chủ (CPU) và thiết bị (GPU) trong hệ thống đa dạng.
- Giải thích mô hình lập trình SIMT và cấu trúc phân cấp của luồng, khối và lưới.
- Phân biệt giữa PTX (Parallel Thread Execution) và mã nhị phân (cubins), và giải thích cách biên dịch ngay lúc cần (JIT) hỗ trợ tương thích.
- Phát triển và biên dịch các hạt nhân CUDA: Viết hàm global, cấu hình thực thi bằng ký hiệu ba dấu chéo, và quản lý quy trình biên dịch NVCC.
- Tối ưu hóa bộ nhớ và di chuyển dữ liệu: Phân biệt các mô hình bộ nhớ Unified, Explicit và Mapped, và triển khai bộ nhớ trang khóa trên máy chủ để truyền tải hiệu quả.
- Quản lý thực thi song song: Sử dụng CUDA Streams, Events và Cooperative Groups để quản lý các tác vụ bất đồng bộ và đồng bộ hóa hoạt động giữa CPU và GPU.
- Thực hiện phép toán con trỏ phức tạp và xác định các điểm nghẽn kiến trúc (von Neumann so với Harvard).
- Triển khai các mẫu thực thi CUDA nâng cao, bao gồm việc khởi chạy hạt nhân phụ thuộc chương trình và truyền dữ liệu hàng loạt đa dạng.
- Sử dụng các tính năng đặc thù phần cứng như Thread Scopes, Proxy bất đồng bộ và Pipeline để tối đa hóa độ song song.
- Cấu hình và điều chỉnh hiệu suất bộ nhớ Unified bằng cách sử dụng chức năng đón trước, gợi ý sử dụng và quản lý kích thước trang.
🔹 Bài học 1: Cơ bản CUDA và Tổng quan Kiến trúc
Tổng quan: Bài học này giới thiệu nền tảng tính toán song song CUDA và kiến trúc phần cứng cơ sở của nó. Nó khám phá cách các hệ thống đa dạng tận dụng cả CPU và GPU, mô hình lập trình SIMT (Lệnh đơn, Nhiều luồng), cũng như cấu trúc phân cấp của luồng, khối và lưới. Ngoài ra, bài học còn đề cập đến quy trình biên dịch CUDA, bao gồm vai trò của PTX, cubins và fatbins nhằm đảm bảo khả năng tương thích nhị phân và tương thích ngược.
Kết quả học tập:
- Xác định vai trò của thiết bị chủ (CPU) và thiết bị (GPU) trong hệ thống đa dạng.
- Giải thích mô hình lập trình SIMT và cấu trúc phân cấp của luồng, khối và lưới.
- Phân biệt giữa PTX (Parallel Thread Execution) và mã nhị phân (cubins), và giải thích cách biên dịch ngay lúc cần (JIT) hỗ trợ tương thích.
🔹 Bài học 2: Lập trình GPU cốt lõi và Quản lý Thực thi
Tổng quan: Bài học này đề cập đến các khía cạnh cơ bản và nâng cao của lập trình GPU bằng CUDA C++. Từ việc xác định hạt nhân cơ bản và quy trình biên dịch NVCC đến các chủ đề quản lý thực thi phức tạp, bao gồm thiết kế hạt nhân SIMT, xung đột ngân hàng bộ nhớ chung, và thực thi bất đồng bộ bằng streams và events. Sinh viên sẽ học cách cân bằng các mô hình bộ nhớ (Unified so với Explicit) và tối ưu hóa mức độ chiếm dụng phần cứng cho tính toán hiệu suất cao.
Kết quả học tập:
- Phát triển và biên dịch các hạt nhân CUDA: Viết hàm global, cấu hình thực thi bằng ký hiệu ba dấu chéo, và quản lý quy trình biên dịch NVCC.
- Tối ưu hóa bộ nhớ và di chuyển dữ liệu: Phân biệt các mô hình bộ nhớ Unified, Explicit và Mapped, và triển khai bộ nhớ trang khóa trên máy chủ để truyền tải hiệu quả.
- Quản lý thực thi song song: Sử dụng CUDA Streams, Events và Cooperative Groups để quản lý các tác vụ bất đồng bộ và đồng bộ hóa hoạt động giữa CPU và GPU.
🔹 Bài học 3: Logic Bộ nhớ nâng cao và Hệ thống GPU đa thiết bị
Tổng quan: Bài học này khám phá hành trình từ các kiến trúc bộ nhớ cơ bản và logic con trỏ đến các kỹ thuật gia tốc GPU nâng cao. Nó đề cập đến các mô hình thực thi cấp phần cứng (SIMT, Lên lịch luồng độc lập), các cơ chế đồng bộ hóa tinh vi (Rào chắn bất đồng bộ, Nguyên tử có phạm vi), và việc tổ chức hệ thống GPU đa thiết bị bằng cả API Runtime và Driver API.
Kết quả học tập:
- Thực hiện phép toán con trỏ phức tạp và xác định các điểm nghẽn kiến trúc (von Neumann so với Harvard).
- Triển khai các mẫu thực thi CUDA nâng cao, bao gồm việc khởi chạy hạt nhân phụ thuộc chương trình và truyền dữ liệu hàng loạt đa dạng.
- Sử dụng các tính năng đặc thù phần cứng như Thread Scopes, Proxy bất đồng bộ và Pipeline để tối đa hóa độ song song.
🔹 Bài học 4: Tối ưu hóa, Đồ thị và Bộ tăng tốc Phần cứng
Tổng quan: Bài học này đề cập đến các kỹ thuật lập trình CUDA hiệu suất cao, tập trung vào việc tối ưu hóa di chuyển dữ liệu và dòng chảy thực thi. Nó khám phá sự chuyển đổi từ thực thi dựa trên stream sang các CUDA Graph bền vững, kiểm soát chi tiết bộ nhớ Unified thông qua đón trước và gợi ý, và tận dụng các bộ tăng tốc phần cứng đặc thù như Tensor Memory Accelerator (TMA) và khả năng duy trì bộ đệm L2. Ngoài ra, bài học còn chi tiết hóa các mẫu đồng bộ hóa nâng cao, phân vùng tài nguyên thông qua Green Contexts, và tương thích xuyên API cho tính toán đa nền tảng hiện đại.
Kết quả học tập:
- Cấu hình và điều chỉnh hiệu suất bộ nhớ Unified bằng cách sử dụng đón trước, gợi ý sử dụng và quản lý kích thước trang.
- Xây dựng, cập nhật và thực thi CUDA Graphs, bao gồm việc sử dụng nút bộ nhớ và khởi chạy bên thiết bị.
- Triển khai đồng bộ hóa nâng cao bằng Rào chắn bất đồng bộ và mẫu Người sản xuất - Người tiêu thụ.
🔹 Bài học 5: Tài liệu tham khảo kỹ thuật và Mở rộng Ngôn ngữ
Tổng quan: Bài học này cung cấp cái nhìn sâu sắc kỹ thuật về các đặc tả tham khảo của mô hình lập trình CUDA và các mở rộng ngôn ngữ C++. Nó đề cập đến giao diện phần cứng – phần mềm thông qua khả năng tính toán, các biến môi trường để kiểm soát thời gian chạy, và yêu cầu cú pháp cụ thể khi viết mã thiết bị hiệu suất cao bằng các chuẩn C++ hiện đại, nhóm hợp tác và các hàm nội tại phần cứng chuyên biệt.
Kết quả học tập:
- Xác định các giới hạn phần cứng và tập hợp tính năng dựa trên các phiên bản Compute Capability của GPU.
- Cấu hình môi trường thực thi CUDA và biên dịch JIT bằng các biến môi trường cấp hệ thống.
- Áp dụng các mở rộng ngôn ngữ C++ (nhãn, lambda, template) trong khi tuân thủ các giới hạn phía thiết bị.