提问人:Predrag Stojadinović 提问时间:11/14/2023 最后编辑:BartPredrag Stojadinović 更新时间:11/15/2023 访问量:49
CUDA 1d 输入数组和 2d 输出数组
CUDA 1d input array with 2d output array
问:
基本上,我需要向下查看一个 1D 整数列表(我甚至可以用于此),并且对于每次返回 5 个值的数组,然后将该数组放入 - 换句话说,我需要使用 1D 输入数组来生成 2D 输出数组
并且已经工作正常 - 这更多是关于如何分配 2D 数组并正确启动内核以用于具有 1D 输出的 2D 输入:(int i = blockIdx.x*blockDim.x + threadIdx.x;
i
doTheMagic(i)
y[i]
doTheMagic
我一直在研究这个例子:https://developer.nvidia.com/blog/easy-introduction-cuda-c-and-c/,当我设置为只返回第一个值而不是整个数组时,一切都很顺利:doTheMagic
__global__
void myKernel(int n, long long a, long long *x, long long *y) {
long long i = blockIdx.x*blockDim.x + threadIdx.x;
if (i < n) y[i] = doTheMagic(i);
}
int main(void) {
int N = 1<<20;
long long *x, *y, *d_x, *d_y;
x = (long long*)malloc(N*sizeof(long long));
y = (long long*)malloc(N*sizeof(long long));
cudaMalloc(&d_x, N*sizeof(long long));
cudaMalloc(&d_y, N*sizeof(long long));
cudaMemcpy(d_x, x, N*sizeof(long long), cudaMemcpyHostToDevice);
cudaMemcpy(d_y, y, N*sizeof(long long), cudaMemcpyHostToDevice);
myKernel<<<(N+255)/256, 256>>>(N, 2.0f, d_x, d_y);
cudaMemcpy(y, d_y, N*sizeof(long long), cudaMemcpyDeviceToHost);
for (int i = 0; i < 64; i++) {
printf("y[%d]: %lld\n", i, y[i]);
}
cudaFree(d_x);
cudaFree(d_y);
free(x);
free(y);
}
但是,我不知道如何返回数组而不是单个值?
答: 暂无答案
评论
doTheMagic
mdrange