簡體   English   中英

在 SYCL/DPC++ 中運行程序時如何指定要使用的特定 GPU 設備?

[英]How to specify particular GPU Device to be used at the time of running a program in SYCL/DPC++?

我正在嘗試使用 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 設備上運行我的代碼嗎?

提前致謝!

是的,可以選擇特定的 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 設備上運行代碼。

Varsha的答案是一個很好的通用解決方案。

但是由於您的問題是用 DPC++ 標記的,我認為值得一提的是另一種方法:

您可以設置SYCL_DEVICE_FILTER環境變量來控制設備檢測結果。 例如, SYCL_DEVICE_FILTER=opencl:gpu:1將使應用程序只能看到 OpenCL 后端中的第二個 GPU。 它甚至會隱藏主機設備。

這是特定於 DPC++ 的,不適用於其他實現。 但是,例如,通過 hipSYCL,您可以使用CUDA_VISIBLE_DEVICESHIP_VISIBLE_DEVICES來實現類似的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM