Quay lại Khóa học
AI032 Professional

Lập trình Các Bộ Xử Lý Song Song Khổng Lồ: Tiếp cận Thực Hành

Khóa học này cung cấp một giới thiệu toàn diện về tính toán GPU và lập trình song song sử dụng môi trường CUDA C. Nó bao gồm kiến trúc GPU, tính song song dữ liệu, quản lý luồng, tối ưu hóa bộ nhớ và các vấn đề hiệu suất nâng cao, được minh họa thông qua các ví dụ thực tế như tái tạo MRI và trực quan hóa phân tử.

4.9
36.0h
569 học viên
0 lượt thích
Trí tuệ nhân tạo
Bắt đầu học

Tổng quan khóa học

📚 Tóm tắt Nội dung

Khóa học này cung cấp một giới thiệu toàn diện về tính toán GPU và lập trình song song bằng môi trường CUDA C. Nó bao gồm kiến trúc GPU, tính song song dữ liệu, quản lý luồng, tối ưu hóa bộ nhớ và các yếu tố hiệu suất nâng cao, được minh họa thông qua các ví dụ thực tế như tái tạo MRI và trực quan hóa phân tử.

Chinh phục nghệ thuật tính toán song song hiệu suất cao với hướng dẫn thực hành, trực tiếp về CUDA và kiến trúc GPU.

Tác giả: David B. Kirk, Wen-mei W. Hwu

Lời cảm ơn: Ian Buck, John Nickolls, đội NVIDIA DevTech, Jensen Huang, David Luebke, Bill Bean, Simon Green, Mark Harris, Manju Hedge, Nadeem Mohammad, Brent Oster, Peter Shirley, Eric Young, và Cyril Zeller.

🎯 Mục tiêu Học tập

  1. Phân biệt triết lý thiết kế và xu hướng hiệu suất giữa các CPU đa lõi và GPU nhiều lõi.
  2. Nhận diện các thành phần chính trong kiến trúc GPU hiện đại, bao gồm các đơn vị xử lý luồng (SMs) và cấu trúc bộ nhớ.
  3. Áp dụng Luật Amdahl để tính tốc độ tăng theo lý thuyết và xác định ảnh hưởng của các điểm nghẽn tuần tự.
  4. So sánh sự khác biệt kiến trúc giữa các đường truyền cố định và mảng xử lý có thể lập trình thống nhất.
  5. Giải thích vai trò của "GPGPU" như một bước chuyển tiếp và những hạn chế của mô hình lập trình shader ban đầu.
  6. Phân tích cách các tính năng phần cứng như thao tác nguyên tử, đồng bộ rào chắn và hỗ trợ số đôi đã thúc đẩy quá trình chuyển đổi sang tính toán tổng quát quy mô lớn.
  7. Nhận diện và tận dụng tính song song dữ liệu trong các thuật toán nhân ma trận.
  8. Triển khai quản lý bộ nhớ thiết bị bao gồm cấp phát, truyền dữ liệu giữa host và device, và giải phóng.
  9. Xây dựng và khởi chạy các kernel CUDA sử dụng chỉ số luồng và cấu hình lưới/khối phù hợp.
  10. Thiết kế các hiệ thống luồng đa chiều (lưới và khối) để ánh xạ các cấu trúc dữ liệu phức tạp lên phần cứng GPU.

🔹 Bài học 1: Giới thiệu về Tính toán Song song và Kiến trúc GPU

Tổng quan: Bài học này khám phá sự chuyển dịch cơ bản từ tính toán tuần tự sang tính toán song song, do sự khác biệt trong triết lý thiết kế giữa CPU và GPU. Người học sẽ nghiên cứu xu hướng “đa lõi” so với “nhiều lõi”, hiểu kiến trúc phần cứng cho phép GPU đạt được băng thông cực kỳ lớn, và học các ràng buộc toán học của tốc độ tăng theo Luật Amdahl.

Kết quả học tập:

  • Phân biệt triết lý thiết kế và xu hướng hiệu suất giữa CPU đa lõi và GPU nhiều lõi.
  • Nhận diện các thành phần chính trong kiến trúc GPU hiện đại, bao gồm Streaming Multiprocessors (SMs) và cấu trúc bộ nhớ.
  • Áp dụng Luật Amdahl để tính tốc độ tăng theo lý thuyết và xác định ảnh hưởng của các điểm nghẽn tuần tự.

🔹 Bài học 2: Sự tiến hóa và tương lai của Tính toán GPU

Tổng quan: Bài học này theo dõi hành trình kiến trúc của Bộ xử lý đồ họa (GPU) từ một thiết bị phần cứng chuyên dụng cố định dùng để vẽ tam giác đến trạng thái hiện tại là một bộ xử lý song song mạnh mẽ, thống nhất và mang tính tổng quát. Người học sẽ tìm hiểu sự chuyển dịch từ các đường truyền đồ họa cứng nhắc sang shader có thể lập trình, sự nổi lên của phong trào GPGPU, và các kiến trúc quy mô lớn hiện đại đang thúc đẩy các mô phỏng khoa học và kỹ thuật ngày nay.

Kết quả học tập:

  • So sánh sự khác biệt kiến trúc giữa các đường truyền cố định và mảng xử lý có thể lập trình thống nhất.
  • Giải thích vai trò của "GPGPU" như một bước chuyển tiếp và những hạn chế của mô hình lập trình shader ban đầu.
  • Phân tích cách các tính năng phần cứng như thao tác nguyên tử, đồng bộ rào chắn và hỗ trợ số đôi đã thúc đẩy quá trình chuyển đổi sang tính toán tổng quát quy mô lớn.

🔹 Bài học 3: Cấu trúc Chương trình CUDA và Quản lý Bộ nhớ

Tổng quan: Bài học này đề cập đến kiến trúc nền tảng của một chương trình CUDA, nhấn mạnh sự khác biệt giữa thực thi Host (CPU) và Device (GPU). Người học sẽ học cách nhận diện tính song song dữ liệu trong các thao tác ma trận, quản lý không gian bộ nhớ riêng biệt bằng API CUDA, và tổ chức thực thi song song thông qua một hệ thống phân cấp lưới, khối và luồng theo kiểu Single-Program, Multiple-Data (SPMD).

Kết quả học tập:

  • Nhận diện và tận dụng tính song song dữ liệu trong các thuật toán nhân ma trận.
  • Triển khai quản lý bộ nhớ thiết bị bao gồm cấp phát, truyền dữ liệu giữa host và device, và giải phóng.
  • Xây dựng và khởi chạy kernel CUDA sử dụng chỉ số luồng và cấu hình lưới/khối phù hợp.

🔹 Bài học 4: Luồng và Lên lịch CUDA nâng cao

Tổng quan: Bài học này khám phá tổ chức phân cấp của luồng trong CUDA, tập trung vào cách chỉ số đa chiều ánh xạ đến dữ liệu vật lý và tài nguyên phần cứng. Nó chi tiết các cơ chế đồng bộ rào chắn và khả năng mở rộng vô hình, kết thúc bằng các nguyên lý kiến trúc về gán luồng và lên lịch theo cụm (warp) nhằm đạt được khả năng chịu đựng độ trễ trong tính toán hiệu suất cao.

Kết quả học tập:

  • Thiết kế các hệ thống luồng đa chiều (lưới và khối) để ánh xạ các cấu trúc dữ liệu phức tạp lên phần cứng GPU.
  • Triển khai chỉ số dữ liệu chính xác bằng các biến CUDA tích hợp (blockIdx, threadIdx, blockDim).
  • Áp dụng đồng bộ rào chắn để đảm bảo tính toàn vẹn dữ liệu trong khi duy trì khả năng mở rộng vô hình trên các kiến trúc GPU khác nhau.

🔹 Bài học 5: Tối ưu hóa Bộ nhớ và Chia nhỏ Bộ nhớ Chung

Tổng quan: Bài học này khám phá cách băng thông bộ nhớ và các giới hạn tài nguyên trở thành các điểm nghẽn chính trong tính toán song song. Nó chi tiết việc sử dụng "chia nhỏ" (tiling) để giảm lưu lượng truy cập bộ nhớ toàn cục và giải thích vai trò then chốt của các rào chắn đồng bộ (__syncthreads()) cũng như sự lựa chọn chiến lược giữa thanh ghi và bộ nhớ chung để tối ưu hiệu suất.

Kết quả học tập:

  • Phân tích cách giới hạn thanh ghi và bộ nhớ chung quyết định mức độ song song (occupancy) trong một kernel.
  • Đo lường mức độ giảm tiêu thụ băng thông bộ nhớ toàn cục nhờ kỹ thuật chia nhỏ.
  • Nhận diện nhu cầu sử dụng các hàm đồng bộ để duy trì tính toàn vẹn dữ liệu khi truy cập bộ nhớ chung.

🔹 Bài học 6: Phân tích Hiệu suất và Thực thi SIMT

Tổng quan: Bài học này khám phá các yếu tố kiến trúc và thuật toán cần thiết để tối ưu hóa kernel CUDA. Nó chuyển từ các mô hình thực thi cơ bản — đặc biệt là đơn vị Single-Instruction, Multiple-Thread (SIMT) và chia nhỏ cụm (warp) — sang các kỹ thuật điều chỉnh hiệu suất nâng cao bao gồm ghép nối bộ nhớ, nhân ma trận theo dạng chia nhỏ, và phân vùng động tài nguyên Streaming Multiprocessor (SM).

Kết quả học tập:

  • Phân tích cách ánh xạ các khối luồng đa chiều vào thứ tự thực thi tuyến tính theo cụm của phần cứng.
  • Đánh giá và giảm thiểu sự phân nhánh điều khiển trong các thuật toán giảm song song.
  • Tối ưu băng thông bộ nhớ toàn cục bằng cách triển khai ghép nối bộ nhớ và mẫu truy cập dữ liệu theo dạng chia nhỏ.

🔹 Bài học 7: Số học dấu phẩy động và Độ chính xác Số học

Tổng quan: Bài học này đề cập đến kiến trúc cơ bản của số dấu phẩy động, tập trung vào các thành phần chuẩn IEEE 754: dấu, mũ mã hóa thừa và phần mantissa chuẩn hóa. Người học sẽ khám phá cách các mẫu bit này ánh xạ lên trục số rời rạc và cách giới hạn của biểu diễn này ảnh hưởng đến độ chính xác của các thuật toán phức tạp như tổng lớn.

Kết quả học tập:

  • Phân tích định dạng số dấu phẩy động để tính giá trị số từ mẫu bit bằng biểu diễn chuẩn hóa và mã hóa thừa.
  • Trực quan hóa sự phân bố các số có thể biểu diễn trên trục số và giải thích ảnh hưởng của việc phân bổ bit giữa mũ và mantissa.
  • Đo lường sai số số học bằng đơn vị ULP và nhận diện cách các chế độ làm tròn khác nhau góp phần gây ra lỗi.

🔹 Bài học 8: Trường hợp nghiên cứu: Song song hóa Tái tạo MRI

Tổng quan: Bài học này khám phá việc song song hóa quá trình tái tạo hình ảnh cộng hưởng từ (MRI) tiên tiến trên GPU. Nó tập trung vào quy trình tái tạo lặp lại cho các quỹ đạo không Cartesius, đặc biệt là tối ưu hóa kernel F^H d tốn kém về mặt tính toán thông qua các biến đổi vòng lặp, quản lý bộ nhớ hằng số, sắp xếp lại bố cục dữ liệu và sử dụng các hàm lượng giác được gia tốc phần cứng.

Kết quả học tập:

  • Hiểu sự chuyển dịch từ tái tạo dựa trên FFT Cartesius sang các thuật toán giải hệ phương trình tuyến tính lặp đối với dữ liệu k-space không Cartesius.
  • Áp dụng biến đổi fission vòng lặp và hoán đổi vòng lặp để chuyển mã C tuần tự thành cấu trúc phù hợp với ánh xạ hàng loạt luồng CUDA.
  • Tối ưu băng thông bộ nhớ bằng cách chia nhỏ bộ nhớ hằng số và bố cục dữ liệu Array-of-Structs (AoS).

🔹 Bài học 9: Trường hợp nghiên cứu: Trực quan hóa Phân tử và Thực thi đa GPU

Tổng quan: Bài học này khám phá ứng dụng thực tế của tính toán GPU trong trực quan hóa phân tử, cụ thể là sử dụng phương pháp Tổng điện Coulomb trực tiếp (DCS) để tính bản đồ tiềm năng tĩnh điện. Người học sẽ tiến từ một phiên bản kernel cơ bản đến các phiên bản tối ưu cao, tận dụng việc giãn lệnh, ghép nối bộ nhớ và thêm khoảng trống.

Kết quả học tập:

  • Triển khai kernel Tổng điện Coulomb trực tiếp (DCS) sử dụng bộ nhớ hằng số CUDA và kỹ thuật che giấu độ trễ bộ nhớ toàn cục.
  • Tối ưu hiệu suất kernel thông qua giãn lệnh lệnh và tái sử dụng các tính toán tọa độ chung.
  • Áp dụng chiến lược ghép nối bộ nhớ và thêm khoảng trống để căn chỉnh truy cập bộ nhớ toàn cục GPU nhằm đạt băng thông tối đa.

🔹 Bài học 10: Tư duy Tính toán và Chọn lựa Thuật toán Song song

Tổng quan: Bài học này khám phá sự chuyển dịch từ tư duy tuần tự sang giải quyết vấn đề theo hướng song song bằng cách tập trung vào mục tiêu của lập trình song song và việc lựa chọn chiến lược thuật toán. Người học sẽ học cách phân tách bài toán thành các đơn vị có thể song song hóa, áp dụng tư duy tính toán để cầu nối khoảng cách giữa khoa học lĩnh vực và kiến trúc phần cứng, và đánh giá hiệu suất thuật toán.

Kết quả học tập:

  • Xác định các mục tiêu chính của lập trình song song và tính tốc độ tăng theo lý thuyết bằng Luật Amdahl.
  • Phân biệt giữa phân chia theo nhiệm vụ và theo dữ liệu, và áp dụng chiến lược theo nguyên tử (scatter) hay theo lưới (gather).
  • Đánh giá và lựa chọn các thuật toán song song dựa trên các tiêu chí như băng thông bộ nhớ, độ phức tạp tính toán và giới hạn kiến trúc.

🔹 Bài học 11: Giới thiệu Mô hình Lập trình OpenCL

Tổng quan: Bài học này giới thiệu OpenCL như một khung hỗ trợ tính toán song song đa nền tảng, tập trung vào mô hình song song hóa dữ liệu và trừu tượng phần cứng phân cấp. Người học sẽ học cách ánh xạ các cấu trúc NDRange và bộ nhớ của OpenCL sang các tương đương CUDA và nắm vững việc quản lý thiết bị phía host thông qua mô hình biên dịch động.

Kết quả học tập:

  • Ánh xạ song song hóa và các tầng bộ nhớ của OpenCL sang kiến trúc cụ thể CUDA (ví dụ: ánh xạ Work-groups sang Blocks và Local Memory sang Shared Memory).
  • Triển khai các hàm kernel OpenCL và quản lý môi trường thực thi phía host bằng Contexts và Command Queues.
  • Thực thi quy trình biên dịch động để xây dựng kernel từ mã nguồn tại thời điểm chạy.

🔹 Bài học 12: Các Tính năng GPU Hiện đại và Hướng Tương lai

Tổng quan: Bài học này khám phá sự tiến hóa về kiến trúc và chức năng của GPU, tập trung vào chuyển dịch hướng tới quản lý bộ nhớ tinh vi hơn, khả năng thực thi kernel nâng cao và hiệu suất lõi tăng cường. Người học sẽ xem xét cách các tính năng như Không gian Bộ nhớ Thiết bị Thống nhất và lời gọi hàm ở cấp kernel chuyển đổi GPU thành bộ xử lý tổng quát.

Kết quả học tập:

  • Giải thích ý nghĩa của Sự tiến hóa Kiến trúc Bộ nhớ và xu hướng chuyển sang Không gian Bộ nhớ Thiết bị 64-bit Thống nhất.
  • Phân tích cách Các Thao tác Nguyên tử Nâng cao và Lời gọi Hàm ở cấp Kernel cho phép triển khai các cấu trúc dữ liệu và thuật toán phức tạp.
  • Đánh giá tác động hiệu suất của Việc Thực thi Đồng thời Nhiều Kernel, Cải tiến Tốc độ Số đôi và Hiệu quả Điều khiển Luồng trong môi trường GPU hiện đại.