Mỗi thiết bị GPU (AMD, NVidea hoặc bất kỳ thiết bị nào khác) được chia thành nhiều Đơn vị tính toán (MultiProcessors), mỗi bộ có một số lõi cố định (VertexShaders/StreamProcessors). Vì vậy, có một bộ xử lý đồng thời (Compute Units) x (VertexShaders/compute unit)
để tính toán, nhưng chỉ có một số lượng cố định nhỏ là __local
bộ nhớ (thường là 16KB hoặc 32KB) có sẵn cho mỗi MultiProcessor. Do đó, số lượng chính xác của các bộ xử lý này quan trọng.OpenCL kích thước bộ nhớ cục bộ và số đơn vị tính toán
Bây giờ câu hỏi của tôi:
- (a) Làm thế nào tôi có thể biết được số lượng multiprocessors trên một thiết bị? Điều này có giống với
CL_DEVICE_MAX_COMPUTE_UNITS
không? Tôi có thể suy ra nó từ các tờ thông số kỹ thuật như http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units không? - (b) Làm cách nào để biết số lượng bộ nhớ
__local
trên mỗi MP có sẵn trên GPU trước khi mua? Tất nhiên tôi có thể yêu cầuCL_DEVICE_LOCAL_MEM_SIZE
trên một máy tính chạy nó, nhưng tôi không thấy làm thế nào tôi có thể suy ra nó từ ngay cả một tờ thông số kỹ thuật chi tiết cá nhân như http://www.amd.com/us/products/desktop/graphics/7000/7970/Pages/radeon-7970.aspx#3? - (c) Thẻ hiện tại lớn nhất
CL_DEVICE_LOCAL_MEM_SIZE
là gì? Giá không thực sự quan trọng, nhưng 64KB (hoặc lớn hơn) sẽ mang lại lợi ích rõ ràng cho ứng dụng tôi đang viết, vì thuật toán của tôi hoàn toàn song song, nhưng cũng có nhiều bộ nhớ với mẫu truy cập ngẫu nhiên trong mỗi MP (lặp qua các cạnh đồ thị).
Thử chạy truy vấn thiết bị trong các mẫu do AMD/NVIDIA đưa ra trong SDK. Nếu bạn muốn biết các truy vấn thiết bị của thiết bị cụ thể, có rất nhiều người đã đặt nó trực tuyến. – nouveau