Cảm ơn bạn đã gửi yêu cầu! Một thành viên trong đội ngũ của chúng tôi sẽ liên hệ với bạn ngay lập tức.
Cảm ơn bạn đã gửi đặt chỗ! Một thành viên trong đội ngũ của chúng tôi sẽ liên hệ với bạn ngay lập tức.
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