2012-01-14 31 views
7

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ầu CL_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ị).
+0

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

Trả lời

7
  1. CL_DEVICE_MAX_COMPUTE_UNITS nên cung cấp cho bạn số lượng ComputeUnits, nếu không bạn có thể lướt qua nó từ hướng dẫn sử dụng thích hợp (AMD opencl programming guideNvidia OpenCL programming guide)
  2. Hướng dẫn liên kết cho AMD chứa thông tin về bộ nhớ địa phương availible trên một đơn vị tính toán (thường là 32kB/CU). Đối với NVIDIA, tìm kiếm google nhanh chóng tiết lộ this document, cung cấp kích thước bộ nhớ cục bộ là 16kB/CU cho GPU dựa trên G80 và G200. Đối với thẻ dựa trên fermi (GF100), có 64kB bộ nhớ onchip khả dụng, có thể được cấu hình là bộ nhớ cục bộ 48kB và bộ nhớ cache 16kB L1 hoặc bộ nhớ cục bộ 16kB và bộ nhớ cache 48kB L1. Hơn nữa các thẻ dựa trên fermi có bộ đệm L2 tối đa 768kB (768kB cho GF100 và GF110, 512kB cho GF104 và GF114 và 384kB cho GF106 và GF116, không cho GF108 và GF118 theo wikipedia).
  3. Từ thông tin trên, có vẻ như thẻ nvidia hiện tại có bộ nhớ cục bộ nhiều nhất trên mỗi đơn vị tính toán. Hơn nữa nó là người duy nhất có L2 Cache chung từ sự hiểu biết của tôi.

Để sử dụng bộ nhớ cục bộ, bạn nên nhớ rằng bộ nhớ cục bộ được cấp phát cho mỗi nhóm làm việc, trong khi Đơn vị tính toán thường có thể duy trì nhiều hơn một nhóm làm việc. Vì vậy, nếu thuật toán của bạn phân bổ toàn bộ bộ nhớ cục bộ cho một nhóm làm việc, bạn sẽ không thể sử dụng đạt được số tiền song song tối đa. Cũng lưu ý rằng kể từ khi bộ nhớ địa phương được truy cập ngẫu nhiên ngân hàng sẽ dẫn đến rất nhiều xung đột ngân hàng và serializations dọc. Vì vậy, thuật toán của bạn có thể không parallize khá tốt như bạn nghĩ rằng nó sẽ (hoặc có thể nó sẽ, chỉ đề cập đến khả năng).

Với thẻ dựa trên Fermi, đặt cược tốt nhất của bạn có thể được tính trên bộ đệm thay vì bộ nhớ cục bộ rõ ràng, nếu tất cả nhóm làm việc của bạn hoạt động trên cùng một dữ liệu (tôi không biết cách chuyển cấu hình bộ nhớ L1/cục bộ).

+0

Đó là một điểm rất thú vị bạn tăng lên ở đó, thuật toán của tôi thực sự tiêu thụ tất cả bộ nhớ cục bộ trên mỗi đơn vị tính toán.Làm thế nào nhiều nhóm làm việc nên được chạy trên cùng một đơn vị tính toán để làm cho nó chạy ở (gần) tốc độ đầy đủ? – user1111929

+0

Ngoài ra, bộ nhớ cache L2 có vẻ thú vị, nhưng tôi không hiểu. Các thiết bị hiện đại có 32 đơn vị tính toán trên chúng, và Fermi cung cấp bộ nhớ cache L2 768KB, chỉ có 24KB cho mỗi đơn vị tính toán (so với 64KB L1)? I E. có ít L2 hơn L1 cache ??? Hay tôi hiểu lầm về điểm cache này? – user1111929

+0

Phụ lục cho nhận xét đầu tiên của tôi ở trên: mỗi nhóm làm việc sẽ bao gồm một vài trăm mục công việc. – user1111929

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