可能重复:
计算 cuda 数组中数字的出现次数
有没有办法使用推力或 cuda 来计算数组中重复项的出现次数?
例如,如果我有一个设备向量 { 11, 11, 9, 1, 3, 11, 1, 2, 9, 1, 11} 我应该得到 1 :3 2:1 3:1 9:2, 11:4
如果推力不能做到这一点,我该如何使用内核来做到这一点?
谢谢!我正在做浓度计算。这就是我问这个问题的原因。假设在具有 nx X ny X nz 细胞的域中有 100000 个粒子,我需要计算每个细胞的浓度(每个细胞中有多少粒子)
我的内核是这个
__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];
}