查找 GpuMat 所在的 GPU

Find which GPU a GpuMat is on

本文关键字:GPU GpuMat 查找      更新时间:2023-10-16

我的系统上有多个 GPU,我想找到一种简单的方法来确定cv::cuda::GpuMat分配给哪个 GPU。例如,忽略错误:

int numDevices = cv::cuda::getCudaEnabledDeviceCount();
// Choose a random GPU
cudaSetDevice(rand()%numDevices);
cv::cuda::GpuMat foo(5, 5, CV_8UC1);
// Choose another random GPU
cudaSetDevice(rand()%numDevices);

现在,foo生活在哪个 GPU 上?我正在使用OpenCV 3和CUDA 8,以防有特定于版本的解决方案。

我不知道

这在 OpenCV 中如何或是否工作,但可以通过 CUDA 运行时 API 查询指针,并查看它是主机还是设备指针,以及它在具有统一寻址支持的平台上与哪个设备相关联。

根据文档,您可以查询支持使用 cudaPointerGetAttributes 分配的设备内存的指针,它将报告设备编号。如果您在没有统一寻址支持的平台上工作,这将不起作用,并且如果您尝试,将报告运行时错误。

从问题中的示例出发,可以按如下方式查询foo

cudaPointerAttributes attrs;
cudaPointerGetAttributes(&attrs, foo.data);
std::cout << "GpuMat foo resides on GPU #" << attrs.device << 'n';