gpt4 book ai didi

cuda - 我们可以将 "normal"GPU 内存复制到 "unified"内存吗?

转载 作者:行者123 更新时间:2023-12-04 21:06:33 28 4
gpt4 key购买 nike

我们有两个 GPU 内存,一个分配给 cuMalloc作为普通设备内存,另一个分配为cuMallocManaged作为统一内存。它们之间可以复制吗?如果我们使用驱动程序 API,我应该使用什么方向?

float* normalMem, unifiedMem;
cuMalloc(&normalMem, 100);
cuMallocManaged(&unifiedMem, 100);
cuMemcpyD2D(unifiedMem, normalMem, 100); // ? D2D? or D2H? or else?

最佳答案

是的,您可以 .例如看下面的代码。

  • 它声明了一个普通指针、一个托管指针和一个主机指针,所有这些都是 100 float .
  • 然后初始化主机指针中的值,然后使用 cudaMemCpy 将值复制到普通指针。
  • 值现在被复制到托管指针
  • 内核中使用托管指针来显示值已从两个缓冲区复制。

  • 我认为代码是不言自明的
    __global__ 
    void test(float* d_ptr){
    for(int i=0;i<100;i++)
    printf("%f \n",d_ptr[i]);
    printf("\n");
    }

    ////////////////////////////////////////////////////////////////////////////////
    // Program main
    ////////////////////////////////////////////////////////////////////////////////
    int main(int argc, char **argv)
    {

    size_t size = sizeof(float)*100;
    float* h_p =(float*) malloc(size);
    float* d_p, dm_p ;
    cudaMalloc(&d_p,size);
    cudaMallocManaged(&dm_p,size);

    for(int i=0;i<100;i++)
    h_p[i]=2*(float)i;

    cudaMemcpy(d_p,h_p,size,cudaMemcpyHostToDevice);

    cudaDeviceSynchronize();

    cudaMemcpy(dm_p,d_p,size,cudaMemcpyDeviceToDevice);

    cudaDeviceSynchronize();

    test<<<1,1>>>(dm_p);

    cudaDeviceSynchronize();

    cudaFree(dm_p);
    cudaFree(d_p);
    free(h_p);
    return 0;
    }

    记得要 read the Unified Memory access rules .

    关于cuda - 我们可以将 "normal"GPU 内存复制到 "unified"内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44460741/

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