首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个GPU中的固定内存

多个GPU中的固定内存
EN

Stack Overflow用户
提问于 2017-07-20 01:50:40
回答 1查看 487关注 0票数 3

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

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

这是我的问题。我是否可以在主线程中调用cudaHostAlloc()并将指针作为lParam来调用,或者在调用cudaSetDevice(nDeviceID)之后在每个分支线程中调用它?

这是伪码。

1)在主线程上调用cudaHostAlloc

主螺纹

代码语言:javascript
复制
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 );

分支螺纹

代码语言:javascript
复制
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

主螺纹

代码语言:javascript
复制
AcqBuf(arrfRaw, size);
for i =1:4
    ST_Param* pstParam = new ST_Param(i, size/4, arrfRaw + (i-1)*size/4);
    AfxBeginThread(Calc, pstParam);

分支螺纹

代码语言:javascript
复制
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);

我主要好奇的是,固定内存是否是特定于设备的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 08:15:30

自CUDA4.0以来,运行时API在本质上是线程安全的,并且在给定应用程序中的每个主机线程之间自动共享任何给定GPU上的上下文(请参见这里)。

此外,引用了相关的文档

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

  • 通过cudaHostAlloc()进行的分配可以在使用统一地址空间的所有设备上自动移植(请参阅便携式内存),而cudaHostAlloc()返回的指针可以直接从运行在这些设备上的内核中使用(也就是说,不需要像映射内存中描述的那样通过cudaHostGetDevicePointer()获得设备指针。

因此,如果您的GPU和平台支持统一的虚拟寻址,那么固定/映射的主机内存将自动移植到该地址空间内的所有设备,并且每个GPU上下文在每个主机线程之间自动可移植。因此,考虑到上面描述的所有约束,从单个主机线程执行完整的固定内存设置应该是安全的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45203787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档