如何使用cudaMalloc / cudaMemcpy作为指向包含指针的结构的指针?

t_carn

我到处都浏览过这个站点和其他站点,但没有任何效果。我要针对我的具体情况提出问题。

我有一堆矩阵,目标是使用内核让GPU在所有矩阵上执行相同的操作。我很确定我可以使内核正常工作,但不能使cudaMalloc / cudaMemcpy工作。

我有一个指向Matrix结构的指针,该结构具有一个称为元素的成员,该成员指向一些浮点数。我可以做所有的非cuda malloc。

感谢您提供的所有/所有帮助。

代码:

typedef struct {
    int width;
    int height;
    float* elements;
} Matrix;

int main void() {
    int rows, cols, numMat = 2; // These are actually determined at run-time
    Matrix* data = (Matrix*)malloc(numMat * sizeof(Matrix));

    // ... Successfully read from file into "data" ...

    Matrix* d_data;
    cudaMalloc(&d_data, numMat*sizeof(Matrix)); 
    for (int i=0; i<numMat; i++){
        // The next line doesn't work
        cudaMalloc(&(d_data[i].elements), rows*cols*sizeof(float));

        // Don't know if this works
        cudaMemcpy(d_data[i].elements, data[i].elements,  rows*cols*sizeof(float)), cudaMemcpyHostToDevice);
    }

    // ... Do other things ...
}

谢谢!

迈克尔·海德尔(Michael Haidl)

您必须知道内存所在的位置。malloc分配主机内存,cudaMalloc分配设备上的内存并返回指向该内存的指针。但是,此指针仅在设备功能中有效。

您想要的可以实现如下:

typedef struct {
    int width;
    int height;
    float* elements;
} Matrix;

int main void() {
    int rows, cols, numMat = 2; // These are actually determined at run-time
    Matrix* data = (Matrix*)malloc(numMat * sizeof(Matrix));

    // ... Successfully read from file into "data" ...
    Matrix* h_data = (Matrix*)malloc(numMat * sizeof(Matrix));
    memcpy(h_data, data, numMat * sizeof(Matrix);

    for (int i=0; i<numMat; i++){

        cudaMalloc(&(h_data[i].elements), rows*cols*sizeof(float));
        cudaMemcpy(h_data[i].elements, data[i].elements,  rows*cols*sizeof(float)), cudaMemcpyHostToDevice);

     }// matrix data is now on the gpu, now copy the "meta" data to gpu
     Matrix* d_data;
     cudaMalloc(&d_data, numMat*sizeof(Matrix)); 
     cudaMemcpy(d_data, h_data, numMat*sizeof(Matrix));
     // ... Do other things ...
}

弄清楚点:Matrix* data包含主机上的数据。Matrix* h_data在元素中包含一个指向设备内存的指针,这些元素可以作为参数传递给内核。内存在GPU上。Matrix* d_data在GPU上完全可用,并且可以像主机上的数据一样使用。

在您的内核代码中,您现在要访问矩阵值,例如,

__global__ void doThings(Matrix* matrices)
{
      matrices[i].elements[0] = 42;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何删除包含指向结构的指针的列表的对象?

来自分类Dev

结构指针包含指向 char (string) 的指针,如何为其分配内存?

来自分类Dev

我可以使用指向包含该结构的指针的结构的指针来访问该结构的成员吗

来自分类Dev

使用结构vs指向结构的指针

来自分类Dev

包含并集的结构体包含指向自身的struct指针使用'。' 访问而不是“->”,感到困惑

来自分类Dev

如何创建指向结构的指针数组?C ++

来自分类Dev

如何从函数返回指向结构的指针?

来自分类Dev

如何对指向结构的指针执行操作?

来自分类Dev

C ++在函数中使用指向结构的指针

来自分类Dev

如何使用指向指针的指针

来自分类Dev

如何在C中将指向结构的指针数组作为参数传递

来自分类Dev

如何封送指向包含无符号字符数组的结构数组的指针?

来自分类Dev

使用指向单个值的指针作为数组

来自分类Dev

如何以可移植的方式从指向结构成员的指针计算指向结构开头的指针?

来自分类Dev

如何在ctypes中使用指向自身的指针设置结构?

来自分类Dev

如何在C ++中使用指向结构的指针向量?

来自分类Dev

如何使用new创建指向结构的指针数组?

来自分类Dev

如何创建一个包含指向另一个未指定类型的结构的指针的结构?

来自分类Dev

如何获得具有指向结构的指针的结构字段?

来自分类Dev

使用指针指向许多结构并访问结构数据成员

来自分类Dev

如何打印指向指针的指针

来自分类Dev

如何在实现XFS的C ++中动态填充结构的指针,该结构是指向数组的指针

来自分类Dev

如何在结构中动态添加数据,该结构是指向指针数组的指针

来自分类Dev

指向包含数组的结构的指针

来自分类Dev

如何为P / Invoke声明指向结构的指针?

来自分类Dev

如何在JNA中传递指向结构的指针?

来自分类Dev

如何修复我的代码以从函数返回指向结构的指针

来自分类Dev

如何在C中分配指向结构的指针?

来自分类Dev

如何声明指向易失性结构的指针

Related 相关文章

  1. 1

    如何删除包含指向结构的指针的列表的对象?

  2. 2

    结构指针包含指向 char (string) 的指针,如何为其分配内存?

  3. 3

    我可以使用指向包含该结构的指针的结构的指针来访问该结构的成员吗

  4. 4

    使用结构vs指向结构的指针

  5. 5

    包含并集的结构体包含指向自身的struct指针使用'。' 访问而不是“->”,感到困惑

  6. 6

    如何创建指向结构的指针数组?C ++

  7. 7

    如何从函数返回指向结构的指针?

  8. 8

    如何对指向结构的指针执行操作?

  9. 9

    C ++在函数中使用指向结构的指针

  10. 10

    如何使用指向指针的指针

  11. 11

    如何在C中将指向结构的指针数组作为参数传递

  12. 12

    如何封送指向包含无符号字符数组的结构数组的指针?

  13. 13

    使用指向单个值的指针作为数组

  14. 14

    如何以可移植的方式从指向结构成员的指针计算指向结构开头的指针?

  15. 15

    如何在ctypes中使用指向自身的指针设置结构?

  16. 16

    如何在C ++中使用指向结构的指针向量?

  17. 17

    如何使用new创建指向结构的指针数组?

  18. 18

    如何创建一个包含指向另一个未指定类型的结构的指针的结构?

  19. 19

    如何获得具有指向结构的指针的结构字段?

  20. 20

    使用指针指向许多结构并访问结构数据成员

  21. 21

    如何打印指向指针的指针

  22. 22

    如何在实现XFS的C ++中动态填充结构的指针,该结构是指向数组的指针

  23. 23

    如何在结构中动态添加数据,该结构是指向指针数组的指针

  24. 24

    指向包含数组的结构的指针

  25. 25

    如何为P / Invoke声明指向结构的指针?

  26. 26

    如何在JNA中传递指向结构的指针?

  27. 27

    如何修复我的代码以从函数返回指向结构的指针

  28. 28

    如何在C中分配指向结构的指针?

  29. 29

    如何声明指向易失性结构的指针

热门标签

归档