2012-02-17 17 views
10

Tôi cần làm rõ một số. Tôi đang phát triển OpenCL trên máy tính xách tay chạy một GPU nvidia nhỏ (310M). Khi tôi truy vấn thiết bị cho CL_DEVICE_MAX_COMPUTE_UNITS, kết quả là 2. Tôi đọc số nhóm công việc để chạy hạt nhân phải tương ứng với số đơn vị tính toán (Heterogenous Computing with OpenCL, Chương 9, trang 186), nếu không nó sẽ lãng phí quá nhiều bộ nhớ bandwitdh.Số Đơn vị tính tương ứng với số lượng nhóm làm việc

Cũng chip được chỉ định có 16 lõi cuda (tương ứng với PE mà tôi tin). Điều đó có nghĩa là về mặt lý thuyết, thiết lập hiệu năng nhất cho GPU này, liên quan đến băng thông bộ nhớ toàn cầu, có phải có hai nhóm làm việc với 16 mục công việc không?

Trả lời

16

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.

+0

Tôi sẽ đọc nó, cảm ơn. – rdoubleui

2

Tôi thậm chí không nghĩ rằng kết hợp số lượng nhóm làm việc của bạn với đơn vị tính toán là một ý tưởng hay về CPU. Nó là tốt hơn để oversubscribe các lõi bằng nhiều lần. Điều này cho phép khối lượng công việc di chuyển xung quanh động (trong lượng tử nhóm làm việc) khi các bộ vi xử lý khác nhau đi đúng hướng hoặc bị phân tâm với công việc khác. Workgroup count = CL_DEVICE_MAX_COMPUTE_UNITS chỉ thực sự hoạt động tốt trên một máy đang làm hoàn toàn không có gì khác và lãng phí rất nhiều năng lượng giữ cho lõi không sử dụng thức.

Các vấn đề liên quan