CUDA根据条件填充较小的阵列

CUDA根据条件填充较小的阵列,cuda,Cuda,假设我有一个数组 X = [1,2,3,4,5,6,7,8,9,10] 是否可以创建更小的数组并根据某些条件填充它们。例如,如果我想将X中的数字分成数组,如 divisibleByTwo = [2,4,6,8,10] divisibleByThree = [3,6,9] divisibleByFour = [4,8] 如果我有非并行代码,它将类似于 std::vector<int> divisibleByTwo; for (int i=0; i<sizeof(x); i++

假设我有一个数组

X = [1,2,3,4,5,6,7,8,9,10]
是否可以创建更小的数组并根据某些条件填充它们。例如,如果我想将X中的数字分成数组,如

divisibleByTwo = [2,4,6,8,10]
divisibleByThree = [3,6,9]
divisibleByFour = [4,8]
如果我有非并行代码,它将类似于

std::vector<int> divisibleByTwo;
for (int i=0; i<sizeof(x); i++)
{
    if (X[i]/2 == 0)
    {
        divisibleByTwo.emplace_back(X[i]);
    }
}
我必须比较A和B的所有元素,找到元素相等的B的索引。因此结果将是一个数组,这样

C[0] = [ ]  // indexes of B matching element at index 0 of A (1)
c[1] = [2] // indexes of B matching element at index 1 of A (2)
c[2] = [0, 1] // indexes of B matching element at index 2 of A (3)

例如,您可以启动10个cuda线程,并执行以下操作:

__global__ void decimate(const float *x, float *y) {
   if(threadIdx.x<10 && threadIdx.x%2==0)
      y[threadIdx.x/2] = x[threadIdx.x];
}
在上面的示例中,一半的线程不执行任何操作。或者你可以用5个线程来创建一个内核

__global__ void decimate(const float *x, float *y) {
   if(threadIdx.x<5)
      y[threadIdx.x] = x[threadIdx.x*2];
}

这与CUDA有什么关系?为什么你认为这可能是不可能的?我已经用更多的细节编辑了我的问题
__global__ void decimate(const float *x, float *y) {
   if(threadIdx.x<5)
      y[threadIdx.x] = x[threadIdx.x*2];
}