thrust count occurence [duplicate]

情到浓时终转凉″ 提交于 2019-12-20 04:15:09

问题


Possible Duplicate:
Counting occurences of numbers in cuda array

is there a way to use thrust or cuda to count occurrence for the duplicates in an array?

for example if I have a device vector { 11, 11, 9, 1, 3, 11, 1, 2, 9, 1, 11} I should get 1 :3 2:1 3:1 9:2, 11:4

if thrust cannot do that, How can I use a kernel to do that?

Thanks! I am doing concentration calculation. that's why I am asking this question. assume there are 100000 particles in the domain which has nx X ny X nz cells, i need to calculate the concentration of each cell(how many particles in each cell)

My kernel is this

__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]; 
}

回答1:


You can first sort the vector using thrust::sort and then use thrust::reduce_by_key. However, you also need to create a new vector (called values) of 1's (and of the same length as your sorted vector) after sort. These values will be added up to get the counts:

reduce_by_key is a generalization of reduce to key-value pairs. 
For each group of consecutive keys in the range [keys_first, keys_last) 
that are equal, reduce_by_key copies the first element of the group to 
the keys_output. The corresponding values in the range are reduced using 
the plus and the result copied to values_output.



回答2:


You could use a combination of thrust::unique and thrust::binary_search to find duplicates. You won't be able to do it in place using this approach, but it can be done just using thrust code.



来源:https://stackoverflow.com/questions/11553839/thrust-count-occurence

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!