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}