【发布时间】:2021-08-29 16:01:41
【问题描述】:
我是 cuda 新手。
我有两个数组:
int* AA = new int[5]{1,2,3,4,5};
int* BB = new int[5]{ 2,2,2,4,4 };
我想找到 AA 中每个元素的索引,它等于 BB 中的每个元素,在这种情况下是
{1,1,1,3,3}
这是我的代码:
__global__ void findIndex(int* A, int* B, int* C)
{
int i = threadIdx.x;
for (int j = 0; j < 5; j++)
{
if (B[i] == A[j])
{
C[i] = j;
}
}
}
int main() {
int* AA = new int[5]{1,2,3,4,5};
int* BB = new int[5]{ 2,2,2,4,4 };
int* CC = new int[5]{ 0,0,0,0,0 };
int(*ppA), (*ppB), (*ppC);
cudaMalloc((void**)&ppA, (5) * sizeof(int));
cudaMalloc((void**)&ppB, (5) * sizeof(int));
cudaMalloc((void**)&ppC, (5) * sizeof(int));
cudaMemcpy(ppA, AA, 5 * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(ppB, BB, 5 * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(ppC, CC, 5 * sizeof(int), cudaMemcpyHostToDevice);
int numBlocks = 1;
dim3 threadsPerBlock(5);
findIndex << <numBlocks, threadsPerBlock >> > (ppA, ppB, ppC);
cudaMemcpy(CC, ppC, 5 * sizeof(int), cudaMemcpyDeviceToHost);
for (int m = 0; m < 5; m++) {
printf("%d ", CC[m]);
}
}
我的输出是:
{1,2,3,0,0}
谁能帮忙?
【问题讨论】:
-
使用thurst之类的库,写一些代码。多种可能性
-
感谢您的回答,但由于某些原因,我需要自己写...
-
谢谢罗伯特,我不是在写作业!!:)) 这是我的全部问题:我有两个不同大小的数组,需要找到第一个数组中每个元素的索引第二个数组,我写了一些代码,但它没有得到我想要的结果......
-
如果目的是获取索引,为什么你的代码存储它找到的每个匹配的值?
-
当有多个索引值为 4 时会发生什么?不可能发生?取回任何一个结果?取回结果列表?我建议,您先尝试编写一个正常的函数,它可以正确完成任务,然后尝试将其移植到 Cuda。