找到GpuMat所在的GPU

时间:2018-04-17 01:11:13

标签: c++ opencv cuda

我的系统上有多个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);

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

1 个答案:

答案 0 :(得分:2)

我不知道这在OpenCV中是如何或是否有效,但是可以通过CUDA运行时API查询指针,看看它是主机或设备指针,以及它与具有统一寻址的平台相关联的设备支持。

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

根据问题中的示例,可以按如下方式查询cudaPointerGetAttributes

foo