Khi đặt số lượng nhóm làm việc bằng CL_DEVICE_MAX_COMPUTE_UNITS
có thể là lời khuyên về âm thanh trên một số phần cứng, chắc chắn không phải là trên GPU NVIDIA.
Trên kiến trúc CUDA, đơn vị tính toán OpenCL tương đương với bộ xử lý đa (có thể có 8, 32 hoặc 48 lõi) và được thiết kế để có thể chạy đồng thời tối đa 8 nhóm làm việc (chặn CUDA) mỗi. Với kích thước dữ liệu đầu vào lớn hơn, bạn có thể chọn chạy hàng nghìn nhóm công việc và GPU cụ thể của bạn có thể xử lý tối đa 65535 x 65535 nhóm làm việc trên mỗi lần khởi chạy hạt nhân.
OpenCL có thuộc tính thiết bị khác CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE
. Nếu bạn truy vấn trên thiết bị NVIDIA, nó sẽ trả lại 32 (đây là "dọc" hoặc chiều rộng SIMD tự nhiên của phần cứng). Giá trị đó là kích thước nhóm làm việc nhiều bạn nên sử dụng; kích thước nhóm làm việc có thể lên đến 512 mục mỗi nhóm, tùy thuộc vào tài nguyên được tiêu thụ bởi từng mục công việc. Quy tắc chuẩn của ngón tay cái cho GPU cụ thể của bạn là bạn yêu cầu ít nhất 192 mục công việc hoạt động trên mỗi đơn vị tính toán (bao gồm các chủ đề cho mỗi bộ xử lý trong thuật ngữ CUDA) để bao gồm tất cả độ trễ của kiến trúc và có khả năng nhận được băng thông bộ nhớ đầy đủ hoặc thông lượng số học đầy đủ. về bản chất của mã của bạn.
NVIDIA gửi một tài liệu hay có tên "Hướng dẫn lập trình OpenCL cho kiến trúc CUDA" trong bộ công cụ CUDA. Bạn nên dành chút thời gian để đọc nó, bởi vì nó chứa tất cả các chi tiết cụ thể về cách triển khai NVIDIA OpenCL ánh xạ vào các tính năng của phần cứng của họ và nó sẽ trả lời các câu hỏi mà bạn đã nêu ra ở đây.
Tôi sẽ đọc nó, cảm ơn. – rdoubleui