2012-02-04 17 views
6

Quiero escribir un programa para GPU (preferiblemente OpenCL) y una gran parte del cálculo consiste en contar el número de 1 en una matriz de bits (empaquetada como larga o int).OpenCL: instrucción popcnt de 32 bits y 64 bits en la GPU?

Por lo tanto, en las CPU modernas obviamente usaría la instrucción __popcnt nativa. Leí en varios lugares de Internet que las GPU modernas, esta instrucción también está presente en el hardware, lo que sería una gran aceleración para mí. (al menos para 32 bits, no estoy seguro acerca de 64)

Sin embargo, no encuentro en ninguna parte cómo estas instrucciones. Entonces:

1) ¿Cómo debo averiguar qué GPU tienen esta instrucción? (Todavía necesito comprar mi GPU, entonces será una de alta gama moderna ... probablemente la serie Radeon HD7000 o nVidia Kepler)

2) cómo llamar a esta instrucción desde OpenCL (o un lenguaje GPU similar) ?

Respuesta

5

Esto está disponible como una extensión cl_amd_popcnt. Tengo una tarjeta Radeon 6870 y una opteron 6128 cpu, ambas admiten la extensión.

Aún mejores noticias para usted es que a partir de OpenCL 1.2, ya no es una extensión. Consulte la cuenta de instrucciones en la tarjeta de referencia y en la especificación. El hardware de la serie AMD 7xxx es compatible con OCL 1.2, e imagino que las nuevas cosas de Nvidia también lo son.

"T es de tipo char, charn, uchar, ucharn, corto, shortn, ushort, ushortn, int, INTN, uint uintn, largo, longn, ulong, o ulongn, donde n es 2, 3, 4, 8 o 16 "

T popcount (T x) devuelve el número de bits poblados (distintos de cero) en 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

Cuestiones relacionadas