【发布时间】:2019-11-29 09:42:18
【问题描述】:
我是 CUDA C 编码的新手,我的问题是我需要在每次迭代中更新数组的值;
这是我的代码的一部分,这段代码中使用的函数可以是任何东西,我只需要知道如何在每次迭代中对 Old_Array 的新元素进行操作: (旧数组包含来自主机的元素)
__global__ void MyKernel(int *Old_Array, int *new_Array)
{
int tid = blockIdx.x * blockDim.x + threadIdx.x;
int *p1, *p2;
int Part1[Nbr], Part2[Nbr];
if (tid < (Nbr / 2)) {
//split Old_Array
for (int i = 0; i < NbrCities; i++) {
Part1[i] = Old_Array[tid * 2 * NbrCities + i];
Part2[i] = Old_Array[tid * 2 * NbrCities + NbrCities + i];
}
p1 = operation(Part1, Part2);
p2 = operation2(Part1, Part2);
//replace the new elements in the narray
for (int i = 0; i < Nbr; i++) {
Old_Array[tid * 2 * Nbr + i] = p1[i];
Old_Array[tid * 2 * Nbr + NbrCities + i] = p2[i];
}
//display values of new_Array
if (tid == 0)
CustumPrint(new_Array, Old_Array);
}
}
这是内存分配和复制后的内核调用:
for (int j = 0; j < 4; j++) {
MyKernel << <blocksPerGrid, threadsPerBlock >> > (d_array);
cudaDeviceSynchronize();
}
【问题讨论】:
-
您问题中的内核调用只有一个参数。宿主代码中没有新旧数组
标签: cuda