DPCT1006#
メッセージ#
SYCL* は、統合 GPU デバイスとディスクリート GPU デバイスを区別するための標準 API を提供していません。
説明#
生成されたコードでは、このフィールドの値として 0
(ゼロ) が使用されています。
修正方法の提案#
このフィールドに依存するコードの再実装を検討してください。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1void foo() {
2 int device_number = 0;
3 cudaDeviceProp prop;
4 cudaGetDeviceProperties(&prop, device_number);
5 if (prop.integrated) {
6...7 } else {
8 ... 9 }
10}
このコードは、以下の SYCL* コードに移行されます。
1void foo() {
2 int device_number = 0;
3 dpct::device_info prop;
4 dpct::dev_mgr::instance().get_device(device_number).get_device_info(prop);
5 /*
6 DPCT1006:0: SYCL does not provide a standard API to differentiate between
7 integrated and discrete GPU devices.8 */
9 if (prop.get_integrated()) {
10 ... 11 } else {
12 ... 13 }
14 }
15}
このコードは次のように書き換えられます。
1void foo() {
2 int device_number = 0;
3 dpct::device_info prop;
4 // 1. User can use device name or other info to select device. The `a_device_name` can be obtained by running command ` sycl-ls`
5 // 2. User can use the environment variable `ONEAPI_DEVICE_SELECTOR` to filter out some devices. 6 // 3. User can use the user-provided device-selector like: 7 // int prefer_my_device(const sycl::device& d) {
8 // return d.get_info<info::device::name>() == "MyDevice";
9 // }
10 // sycl::device preferred_device { prefer_my_device };
11 if (dpct::dev_mgr::instance().get_device(device_numbe).get_info<sycl::info::device::name>() == "a_device_name") {
12 ... 13 } else {
14 ... 15 }
16 }
17}