【问题标题】:Transferring data from CPU to GPU and vice versa where exactly?将数据从 CPU 传输到 GPU,反之亦然,具体在哪里?
【发布时间】:2019-11-19 22:38:45
【问题描述】:

我是 CPU 和 GPU 编程的新手。 我了解 cudamalloc 和 cudamemcpy 传输 CPU(主机)数据 到GPU(设备),但我想确切地知道从哪个内存到哪个内存(如果它确实是内存而不是寄存器,因为我不确定),因为我读到GPU有不止一种记忆。

【问题讨论】:

    标签: cuda gpu cpu


    【解决方案1】:

    cudaMalloc 函数在 GPU 的设备全局内存中分配请求的字节数,并返回指向该内存块的初始化指针。 cudaMemcpy 有 4 个参数:

    1. 指向目标内存的指针地址 复制完成。
    2. 源地址
    3. 字节数
    4. 复制的方向,即主机到设备或设备到主机。

    例如

    void Add(float *A, float *B, float *C, int n)
    {
    
        int size = n * sizeof(float);
        float *d_A, *d_B, *d_C;
        cudaMalloc((void**) &d_A, size);
        cudaMemcpy(d_A, A, size, cudaMemcpyHostToDevice);
        cudaMalloc((void**) &d_B, size);
        cudaMemcpy(d_B, B, size, cudaMemcpyHostToDevice);
        cudaMalloc((void**) &d_C, size);
        cudaMemcpy(d_C, C, size, cudaMemcpyHostToDevice);
    
         // further processing code
           ........
    
        cudaMemcpy(C, d_C, size, cudaMemcopyDeviceToHost);
    
         .......
    
    }
    

    cudaMemcpyHostToDevice 和 cudaMemcopyDeviceToHost 是在 CUDA 编程环境中定义的常量。

    在 CUDA 中,主机和设备具有独立的内存空间。 GPU 具有板载 DRAM,并且某些板可能具有超过 4 GB 的 DRAM,它被称为设备全局内存。要在设备上执行内核,程序员需要分配设备全局内存并将相关数据从主机传输到设备内存。 GPU 处理完成后,结果将传输回主机。这些操作在上面的代码 sn-p 中显示。

    【讨论】:

      猜你喜欢
      • 2013-11-25
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      相关资源
      最近更新 更多