Liên hệ với chúng tôi
 Thời gian kéo dài 28 Giờ học

Đề cương khóa học

Giới thiệu

  • CUDA là gì?
  • So sánh CUDA với OpenCL và SYCL
  • Tổng quan về các tính năng và kiến trúc của CUDA
  • Thiết lập Môi trường Phát triển

Bắt đầu

  • Tạo dự án CUDA mới bằng Visual Studio Code
  • Khám phá cấu trúc dự án và các tệp tin
  • Biên dịch và chạy chương trình
  • Hiển thị kết quả sử dụng printf và fprintf

CUDA API

  • Hiểu vai trò của CUDA API trong chương trình host
  • Sử dụng CUDA API để truy vấn thông tin và khả năng của thiết bị
  • Sử dụng CUDA API để cấp phát và giải phóng bộ nhớ thiết bị
  • Sử dụng CUDA API để sao chép dữ liệu giữa host và thiết bị
  • Sử dụng CUDA API để khởi chạy kernel và đồng bộ hóa luồng
  • Sử dụng CUDA API để xử lý lỗi và ngoại lệ

CUDA C/C++

  • Hiểu vai trò của CUDA C/C++ trong chương trình device
  • Sử dụng CUDA C/C++ để viết các kernel chạy trên GPU và thao tác với dữ liệu
  • Sử dụng các kiểu dữ liệu, bộ chỉ định, toán tử và biểu thức của CUDA C/C++
  • Sử dụng các hàm tích hợp của CUDA C/C++, như toán học, atomic, warp, v.v.
  • Sử dụng các biến tích hợp của CUDA C/C++, như threadIdx, blockIdx, blockDim, v.v.
  • Sử dụng các thư viện CUDA C/C++, như cuBLAS, cuFFT, cuRAND, v.v.

Mô hình Bộ nhớ CUDA

  • Hiểu sự khác biệt giữa các mô hình bộ nhớ host và device
  • Sử dụng các không gian bộ nhớ CUDA, như toàn cục (global), chia sẻ (shared), hằng (constant) và cục bộ (local)
  • Sử dụng các đối tượng bộ nhớ CUDA, như con trỏ, mảng, texture và surface
  • Sử dụng các chế độ truy cập bộ nhớ CUDA, như chỉ đọc (read-only), chỉ ghi (write-only), đọc-ghi (read-write), v.v.
  • Sử dụng mô hình nhất quán bộ nhớ CUDA và các cơ chế đồng bộ hóa

Mô hình Thực thi CUDA

  • Hiểu sự khác biệt giữa các mô hình thực thi host và device
  • Sử dụng các luồng, khối và lưới (grid) của CUDA để định nghĩa tính song song
  • Sử dụng các hàm luồng CUDA, như threadIdx, blockIdx, blockDim, v.v.
  • Sử dụng các hàm khối CUDA, như __syncthreads, __threadfence_block, v.v.
  • Sử dụng các hàm lưới CUDA, như gridDim, gridSync, cooperative groups, v.v.

Gỡ lỗi

  • Hiểu các lỗi và lỗi phần mềm phổ biến trong các chương trình CUDA
  • Sử dụng bộ gỡ lỗi của Visual Studio Code để kiểm tra biến, điểm dừng (breakpoints), ngăn xếp gọi (call stack), v.v.
  • Sử dụng CUDA-GDB để gỡ lỗi các chương trình CUDA trên Linux
  • Sử dụng CUDA-MEMCHECK để phát hiện lỗi bộ nhớ và rò rỉ bộ nhớ
  • Sử dụng NVIDIA Nsight để gỡ lỗi và phân tích các chương trình CUDA trên Windows

Tối ưu hóa

  • Hiểu các yếu tố ảnh hưởng đến hiệu suất của các chương trình CUDA
  • Sử dụng kỹ thuật tổ hợp truy cập bộ nhớ (coalescing) CUDA để cải thiện thông lượng bộ nhớ
  • Sử dụng kỹ thuật bộ nhớ đệm (caching) và nạp trước (prefetching) CUDA để giảm độ trễ bộ nhớ
  • Sử dụng kỹ thuật bộ nhớ chia sẻ và bộ nhớ cục bộ của CUDA để tối ưu hóa truy cập và băng thông bộ nhớ
  • Sử dụng kỹ thuật hồ sơ hóa (profiling) và công cụ hồ sơ hóa của CUDA để đo lường và cải thiện thời gian thực thi và việc sử dụng tài nguyên

Yêu cầu

  • Hiểu biết về ngôn ngữ C/C++ và các khái niệm lập trình song song
  • Kiến thức cơ bản về kiến trúc máy tính và phân cấp bộ nhớ
  • Kinh nghiệm làm việc với công cụ dòng lệnh và trình soạn thảo mã

Đối tượng học viên

  • Lập trình viên mong muốn học cách sử dụng CUDA để lập trình cho GPU NVIDIA và khai thác khả năng song song của chúng
  • Lập trình viên mong muốn viết mã hiệu năng cao và có khả năng mở rộng, có thể chạy trên các thiết bị CUDA khác nhau
  • Người lập trình mong muốn khám phá các khía cạnh cấp thấp của lập trình GPU và tối ưu hóa hiệu suất mã của họ

Số người tham gia


Giá cho mỗi học viên

Các khóa học sắp tới

Các danh mục liên quan