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 }

このコードは次のように書き換えられます。

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 }