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

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

Bắt đầu

  • Tạo một dự án OpenCL 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ị đầu ra bằng printf và fprintf

API OpenCL

  • Hiểu vai trò của API OpenCL trong chương trình host
  • Sử dụng API OpenCL để truy vấn thông tin và khả năng của thiết bị
  • Sử dụng API OpenCL để tạo ngữ cảnh, hàng đợi lệnh, bộ đệm, nhân (kernel) và sự kiện
  • Sử dụng API OpenCL để đưa lệnh vào hàng đợi, chẳng hạn như đọc, ghi, sao chép, ánh xạ (map), hủy ánh xạ (unmap), thực thi và chờ
  • Sử dụng API OpenCL để xử lý lỗi và ngoại lệ

OpenCL C

  • Hiểu vai trò của OpenCL C trong chương trình thiết bị
  • Sử dụng OpenCL C để viết các nhân (kernel) thực thi trên thiết bị và thao tác với dữ liệu
  • Sử dụng các kiểu dữ liệu, định danh, toán tử và biểu thức của OpenCL C
  • Sử dụng các hàm tích hợp của OpenCL C, chẳng hạn như toán học, hình học, quan hệ, v.v.
  • Sử dụng các phần mở rộng và thư viện của OpenCL C, chẳng hạn như atomic, image, cl_khr_fp16, v.v.

Mô hình bộ nhớ OpenCL

  • Hiểu sự khác nhau giữa mô hình bộ nhớ host và thiết bị
  • Sử dụng các không gian bộ nhớ của OpenCL, chẳng hạn như global, local, constant và private
  • Sử dụng các đối tượng bộ nhớ của OpenCL, chẳng hạn như buffer, image và pipes
  • Sử dụng các chế độ truy cập bộ nhớ của OpenCL, chẳng hạn như chỉ đọc, chỉ ghi, đọc-ghi, v.v.
  • Sử dụng mô hình nhất quán bộ nhớ và các cơ chế đồng bộ hóa của OpenCL

Mô hình thực thi OpenCL

  • Hiểu sự khác nhau giữa mô hình thực thi host và thiết bị
  • Sử dụng các phần tử làm việc (work-items), nhóm làm việc (work-groups) và phạm vi ND (ND-ranges) của OpenCL để xác định tính song song
  • Sử dụng các hàm phần tử làm việc của OpenCL, chẳng hạn như get_global_id, get_local_id, get_group_id, v.v.
  • Sử dụng các hàm nhóm làm việc của OpenCL, chẳng hạn như barrier, work_group_reduce, work_group_scan, v.v.
  • Sử dụng các hàm thiết bị của OpenCL, chẳng hạn như get_num_groups, get_global_size, get_local_size, v.v.

Gỡ lỗi

  • Hiểu các lỗi và lỗi thường gặp trong các chương trình OpenCL
  • Sử dụng trình gỡ lỗi của Visual Studio Code để kiểm tra biến, điểm dừng, ngăn xếp gọi, v.v.
  • Sử dụng CodeXL để gỡ lỗi và phân tích các chương trình OpenCL trên thiết bị AMD
  • Sử dụng Intel VTune để gỡ lỗi và phân tích các chương trình OpenCL trên thiết bị Intel
  • Sử dụng NVIDIA Nsight để gỡ lỗi và phân tích các chương trình OpenCL trên thiết bị NVIDIA

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 OpenCL
  • Sử dụng các kiểu dữ liệu vector và kỹ thuật vector hóa của OpenCL để cải thiện thông lượng tính toán
  • Sử dụng kỹ thuật trải vòng lặp và cắt lát vòng lặp (loop tiling) của OpenCL để giảm chi phí điều khiển và tăng tính cục bộ
  • Sử dụng bộ nhớ cục bộ và các hàm bộ nhớ cục bộ của OpenCL để tối ưu hóa truy cập bộ nhớ và băng thông
  • Sử dụng phân tích hồ sơ (profiling) và các công cụ phân tích hồ sơ của OpenCL để đo lường và cải thiện thời gian thực thi và mứ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ác công cụ dòng lệnh và trình soạn thảo mã nguồn

Đối tượng tham gia

  • Các lập trình viên muốn học cách sử dụng OpenCL để lập trình trên các thiết bị dị hợp và khai thác tính song song của chúng
  • Các lập trình viên muốn viết mã nguồn có khả năng di động và mở rộng được, chạy trên các nền tảng và thiết bị khác nhau
  • Các lập trình viên muốn khám phá các khía cạnh cấp thấp của lập trình dị hợp và tối ưu hóa hiệu suất mã nguồn

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