gpt4 book ai didi

multidimensional-array - 在CUDA中的设备内存上分配2D阵列

转载 作者:行者123 更新时间:2023-12-03 13:31:10 24 4
gpt4 key购买 nike

如何在Cuda的设备内存中分配和传输2D阵列(与主机之间)?

最佳答案

我找到了解决该问题的方法。我不必弄平阵列。

内置的cudaMallocPitch()功能可以完成这项工作。我可以使用cudaMemcpy2D()函数在设备之间来回传输阵列。

例如

cudaMallocPitch((void**) &array, &pitch, a*sizeof(float), b);


这将创建一个尺寸为a * b的2D数组,其间距作为参数传入。

以下代码创建2D数组并在元素上循环。它易于编译,您可以使用它。

#include<stdio.h>
#include<cuda.h>
#define height 50
#define width 50

// Device code
__global__ void kernel(float* devPtr, int pitch)
{
for (int r = 0; r < height; ++r) {
float* row = (float*)((char*)devPtr + r * pitch);
for (int c = 0; c < width; ++c) {
float element = row[c];
}
}
}

//Host Code
int main()
{

float* devPtr;
size_t pitch;
cudaMallocPitch((void**)&devPtr, &pitch, width * sizeof(float), height);
kernel<<<100, 512>>>(devPtr, pitch);
return 0;
}

关于multidimensional-array - 在CUDA中的设备内存上分配2D阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1047369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com