c++ - 访问 CUDA 中的结构成员?

标签 c++ c cuda

为了简化,假设我有这个结构:
someheader.h

typedef struct
{
    float x
}someStruct;

在 Cuda 中,如果结构由 C++ 应用程序共享,设备函数将如何访问结构的成员?

例如:

__global__ void stuff( someStruct *g ) {
    g[0].x = 0.4f;
}

这是正确的做法吗?它似乎不起作用。

最佳答案

您需要将结构数组传输到 GPU。 例如,要访问内核中的 float 组,您需要执行以下操作

__global__ static void myKernel(float *val)
{
 val[0] = 0.4f;
}

int main()
{
...
cudaMemcpy(d_Val, h_Val, n * sizeof(float), cudaMemcpyHostToDevice);
...
}

这当然是基础知识。您可以将 float 替换为任何数据类型并获得相同的行为。结构不过是用户定义的数据类型。

这不同于发送单个 float (因此是单个结构),因为内核的所有输入都在运行时(取决于显卡)从 GPU 可以访问的位置推送到 GPU 内存系统的某个部分这些值。因此,如果输入是一个结构,当内核试图访问它时,整个结构都驻留在 GPU 上。但是如果你发送一个指向在主机上生成的结构的指针,GPU 具有指针的值而不是实际数据。

关于c++ - 访问 CUDA 中的结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135689/

相关文章:

c++ - 仅刷新文件元数据

c - c中的多维指针有困难吗?

c - 链表字段添加

c - 将动态分配的结构写入文件

cuda - CUDA 中 3D 矩阵的列和行的 1D FFT

c++ - CUDA convolutionFFT2D 示例 - 我看不懂

c++ - 模板指针初始化

c++ - 通用引用 : Cannot convert parameter from 'int' to 'int &&'

c++ - 将多个参数传递给线程函数 c++11

cuda - CUDA Thrust 与原始内核相比如何?