【发布时间】:2016-07-10 22:06:56
【问题描述】:
我想编写一个 CUDA 程序,它返回包含特定条件的更大数组的位置。
最简单的方法是编写一个内核,它返回一个整数数组,如果满足条件,则返回 1,否则返回 0。
另一种方法可能是只返回找到的索引 - 但根据我对 GPU 同步的了解,这将是有问题的(相当于在 GPU 上实现队列/链表)。
提出的第一个想法的问题是数组将在输入大小内。
我想到的另一种方法是创建一个大小为 log(n)/8+1(n=我检查的项目数)的数组,并为每个数组位置使用 1 位(保存一种压缩表示输出)。
我唯一找不到的是 CUDA 是否支持并行位寻址..
我现在如何做的一个例子:
__global__ void test_kernel(char *gpu, char *gpuFind, int *gputSize, int *gputSearchSize, int *resultsGPU)
{
int start_idx = threadIdx.x + (blockIdx.x * blockDim.x);
if (start_idx > *gputTextSize - *gputSearchSize){return;}
unsigned int wrong=0;
for(int i=0; i<*gputSearchSize;i++){
wrong = calculationOnGpu(gpuText, gpuFind, start_idx,i, gputSearchSize);
}
resultsGPU[start_idx] = !wrong;
}
我想要做的不是使用 int 或 char 作为“resultsGpu”变量,而是使用其他东西。
谢谢
【问题讨论】: