You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C++切换GPU设备后是否需要重新执行cudaHostRegister?

跨GPU设备切换时的页锁定内存复用测试

测试显示,在切换GPU设备过程中,不需要对同一页锁定内存重复执行cudaHostUnregister和cudaHostRegister操作,实际内存传输性能与GPU共享内存的表现没有明显差异。

测试代码示例

// 设置当前设备为0
cudaError_t cudaStatus = cudaSetDevice(0);

// 分配缓冲区
int size = 8192;
float* cpuBuffer = new float[size * size];
auto totalBytes = sizeof(float) * size * size;
cudaHostRegister((void*)cpuBuffer, totalBytes, cudaHostRegisterPortable);

float* gpuBuffer = nullptr;
cudaMalloc((void**)&gpuBuffer, totalBytes);

// 数据传输:主机到设备
cudaMemcpy((void*)gpuBuffer, (const void*)cpuBuffer, totalBytes, cudaMemcpyHostToDevice);

// 释放设备端内存
cudaFree(gpuBuffer);
// 无需执行cudaHostUnregister(cpuBuffer);

// 切换到设备1
cudaStatus = cudaSetDevice(1);

cudaMalloc((void**)&gpuBuffer, totalBytes);
// 无需再次执行cudaHostRegister((void*)cpuBuffer, totalBytes, cudaHostRegisterPortable);

// 数据传输:主机到设备
cudaMemcpy((void*)gpuBuffer, (const void*)cpuBuffer, totalBytes, cudaMemcpyHostToDevice);

// 清理资源
cudaFree(gpuBuffer);
cudaHostUnregister(cpuBuffer);
delete[] cpuBuffer;

内容的提问来源于stack exchange,提问作者Philip Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:42:08