【问题标题】:Find which GPU a GpuMat is on查找 GpuMat 在哪个 GPU 上
【发布时间】:2018-09-26 20:16:33
【问题描述】:

由于我的系统上有多个 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,以防有特定于版本的解决方案。

【问题讨论】:

    标签: c++ opencv cuda


    【解决方案1】:

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

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

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

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

    【讨论】:

    • @KenY-N:没关系。我可能想要对平台不支持 UVA 的情况进行错误检查,但这是一个实现细节
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2017-01-31
    相关资源
    最近更新 更多