ocurrencia de conteo de empuje [duplicado]

Posible duplicado:
Contando las ocurrencias de números en la matriz cuda

¿hay una manera de usar thrust o cuda para contar la ocurrencia de los duplicados en una matriz?

por ejemplo, si tengo un vector de dispositivo {11, 11, 9, 1, 3, 11, 1, 2, 9, 1, 11} debería obtener 1: 3 2: 1 3: 1 9: 2, 11: 4

Si el empuje no puede hacer eso, ¿cómo puedo usar un kernel para hacerlo?

¡Gracias! Estoy haciendo cálculo de concentración. Es por eso que estoy haciendo esta pregunta. Supongo que hay 100000 partículas en el dominio que tiene nx X ny X nz celdas, necesito calcular la concentración de cada celda (cuántas partículas hay en cada celda)

Mi kernel es este

__global__ void concentration_kernel(float3* posPtr, uint* device_cons) 
{
    __shared__ uint cache[256];
    uint x = threadIdx.x + blockIdx.x * blockDim.x;
    uint y = threadIdx.y + blockIdx.y * blockDim.y;
    uint offset = x + y * blockDim.x * gridDim.x; 

    float3 posf3 = posPtr[offset];//make_float3(43.5,55,0.66);//
    uint cellIndex = (uint)(posf3.z+1)*153*110 + (uint)(posf3.y)*153 + (uint)posf3.x;

    cache[threadIdx.x] = device_cons[cellIndex];
    __syncthreads();
    uint a = cache[threadIdx.x];
    a++;
    cache[threadIdx.x] = a;
    __syncthreads();

    device_cons[cellIndex] = cache[threadIdx.x]; 
}