【问题标题】:pinned memory in multiple GPUs多个 GPU 中的固定内存
【发布时间】:2017-12-25 12:08:42
【问题描述】:

我正在使用 4 个 GPU,为了加快内存传输,我尝试使用 cudaHostAlloc() 使用固定内存。

主 UI 线程(mfc base)创建 4 个线程,每个线程调用 cudaSetDevice(nDeviceID)。

这是我的问题。我可以在主线程调用 cudaHostAlloc() 并将指针作为 lParam 提供,还是在调用 cudaSetDevice(nDeviceID) 后必须在每个分支线程中调用它?

这是伪代码。

1) 在主线程调用 cudaHostAlloc

主线程

cudaHostAlloc((void**)h_arrfBuf, size*sizeof(float), cudaHostAllocDefault);
AcqBuf(h_arrfBuf, size);
for i =1:4
    ST_Param* pstParam = new ST_Param(i, size/4, h_arrfBuf);
    AfxBeginThread(Calc, pstParam );

分支线程

UINT Calc(LPVOID lParam)
    ST_Param pstParam = reinterpret_cast<ST_Param*>(lParam);
    cudaSetDevice(pstParam->nDeviceID);
    Cudafunc(pstParam->size/4, pstParam->h_arrfBuf+(pstParam->nDeviceID-1)*size/4);

2) 在分支线程调用 cudaHostAlloc

主线程

AcqBuf(arrfRaw, size);
for i =1:4
    ST_Param* pstParam = new ST_Param(i, size/4, arrfRaw + (i-1)*size/4);
    AfxBeginThread(Calc, pstParam);

分支线程

UINT Calc(LPVOID lParam)
    ST_Param pstParam = reinterpret_cast<ST_Param*>(lParam);
    cudaSetDevice(pstParam->nDeviceID);
    cudaHostAlloc((void**)h_arrfBuf, size/4*sizeof(float), cudaHostAllocDefault);
    memcpy(h_arrfBuf, pstParam->arrfRaw, size/4*sizeof(float));
    Cudafunc(pstParam->size/4, h_arrfBuf);

我基本上好奇的是固定内存是否是特定于设备的。

【问题讨论】:

    标签: multithreading cuda mfc


    【解决方案1】:

    从 CUDA 4.0 开始,运行时 API 本质上是线程安全的,任何给定 GPU 上的上下文会在给定应用程序内的每个主机线程之间自动共享(请参阅 here)。

    进一步,引用相关documentation

    当应用程序作为 64 位进程运行时,单个地址空间用于主机和计算能力为 2.0 及更高版本的所有设备。通过 CUDA API 调用进行的所有主机内存分配以及受支持设备上的所有设备内存分配都在此虚拟地址范围内。结果:

    ....

    • 通过cudaHostAlloc() 进行的分配是自动可移植的(请参阅 可移植内存)跨其统一地址的所有设备 使用空间,可以使用cudaHostAlloc()返回的指针 直接从在这些设备上运行的内核中(即,有 无需通过cudaHostGetDevicePointer() 获取设备指针 映射内存中描述。

    所以如果您的 GPU 和平台支持统一虚拟寻址,则固定/映射的主机内存会自动移植到该地址空间内的所有设备,并且每个 GPU 上下文会自动跨每个主机线程移植.因此,考虑到上述所有限制,您应该可以安全地从单个主机线程进行完整的固定内存设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2014-04-26
      相关资源
      最近更新 更多