【问题标题】:How to specify particular GPU Device to be used at the time of running a program in SYCL/DPC++?如何指定在 SYCL/DPC++ 中运行程序时要使用的特定 GPU 设备?
【发布时间】:2021-11-26 15:57:12
【问题描述】:

我正在尝试使用 SYCL/DPC++ 编写代码。我的设备上有两个 GPU。如何指定我的代码需要在特定的 GPU 设备上运行? 当我尝试使用“gpu-selector”运行我的代码时,只有一个默认的用于运行。如何使用其他 GPU 设备来运行我的代码?

这是我的代码。

#include <iostream>
#include <CL/sycl.hpp>
using namespace sycl;
using namespace std;
int main() {
queue my_gpu( gpu_selector{} );
cout << "My GPU Device: " <<
my_gpu.get_device().get_info<info::device::name>() << "\n";
return 0;
}

有人可以帮助我了解如何在特定 GPU 设备上运行我的代码吗?

提前致谢!

【问题讨论】:

    标签: c++ parallel-processing sycl intel-oneapi dpc++


    【解决方案1】:

    是的,可以选择特定的 GPU 设备。请查找以下代码以获取特定 GPU 设备的结果。

    class my_selector : public device_selector {
    public:
    int operator()(const device &dev) const override {
    if (
    dev.get_info<info::device::name>().find("gpu_vendor_name")
    != std::string::npos &&
    dev.get_info<info::device::vendor>().find("gpu_device_name")
    != std::string::npos)
    return 1;
    }
    return -1;
    }
    };
    

    在此代码中,我们可以根据您的要求在 ("gpu_vendor_name") 中指定 GPU 供应商的名称。如果我们有两个具有相同供应商的 GPU 设备,那么我们还可以指定我们要在 GPU 设备中运行代码的一个(“gpu_device_name”)。

    将选择最高的返回值在我们想要的 GPU 设备上运行代码。

    【讨论】:

    • 感谢您查看我的查询。我将按照您建议的步骤进行操作。
    【解决方案2】:

    Varsha 的The answer 是一个很好的通用解决方案。

    但由于您的问题是用 DPC++ 标记的,我认为值得一提的是另一种方法:

    您可以设置SYCL_DEVICE_FILTER环境变量来控制设备检测结果。例如,SYCL_DEVICE_FILTER=opencl:gpu:1 将使应用程序只看到 OpenCL 后端中的第二个 GPU。它甚至会隐藏主机设备。

    这是特定于 DPC++ 的,不适用于其他实现。但是,例如,使用 hipSYCL,您可以使用 CUDA_VISIBLE_DEVICESHIP_VISIBLE_DEVICES 来获得类似的结果。

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多