【发布时间】: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