2012-02-04 19 views
6

Tôi muốn viết một chương trình cho GPU (tốt nhất là OpenCL) và một phần lớn của tính toán bao gồm đếm số lượng 1 trong một mảng bit (đóng gói là dài hoặc int).OpenCL: Hướng dẫn popcnt 32 bit và 64 bit trên GPU?

Vì vậy, trên các CPU hiện đại, tôi rõ ràng sẽ chỉ sử dụng lệnh __popcnt nguyên gốc. Tôi đọc trên một số nơi trên internet rằng các GPU hiện đại, hướng dẫn này cũng có mặt trong phần cứng, đó sẽ là một sự tăng tốc rất lớn đối với tôi. (ít nhất là cho 32-bit, không chắc chắn về 64)

Tuy nhiên, tôi không tìm thấy cách nào để hướng dẫn cho chúng tôi. Vì vậy:

1) Tôi nên tìm hiểu xem GPU nào có hướng dẫn này? (Tôi vẫn cần mua GPU của mình, vì vậy nó sẽ là một chiếc cao cấp hiện đại ... có lẽ là Radeon HD7000 series hoặc nVidia Kepler)

2) cách gọi hướng dẫn này từ OpenCL (hoặc ngôn ngữ GPU tương tự) ?

Trả lời

5

Điều này có sẵn dưới dạng tiện ích mở rộng cl_amd_popcnt. Tôi có một thẻ Radeon 6870 và cpu Opteron 6128, cả hai đều hỗ trợ phần mở rộng.

Tin tốt hơn cho bạn là OpenCL 1.2, nó không còn là phần mở rộng nữa. Xem số lượng lệnh trên thẻ tham chiếu và trong thông số. Phần cứng loạt AMD 7xxx tương thích với OCL 1.2 và tôi cũng tưởng tượng ra những thứ mới của Nvidia.

"T là kiểu char, Charn, uchar, ucharn, ngắn, shortn, ushort, ushortn, int, intn, uint, uintn, dài, longn, ulong, hoặc ulongn, trong đó n là 2, 3, 4, 8, hoặc 16 "

T popcount (T x) trả về số lượng các ô được điền (không khác) trong x.

http://www.khronos.org/registry/cl/sdk/1.2/docs/OpenCL-1.2-refcard.pdf

http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf

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