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}