我的系统上有多个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,以防有特定版本的解决方案。
答案 0 :(得分:2)
我不知道这在OpenCV中是如何或是否有效,但是可以通过CUDA运行时API查询指针,看看它是主机或设备指针,以及它与具有统一寻址的平台相关联的设备支持。
根据documentation,您可以使用GetClassRoom
查询支持分配的设备内存的指针,它将报告设备编号。如果您在没有统一寻址支持的平台上工作,这将无效,如果您尝试,将报告运行时错误。
根据问题中的示例,可以按如下方式查询cudaPointerGetAttributes
:
foo