DPCT1006#

メッセージ#

SYCL* は、統合 GPU デバイスとディスクリート GPU デバイスを区別するための標準 API を提供していません。

詳細な説明#

生成されたコードでは、このフィールドの値として 0 (ゼロ) が使用されています。

修正方法の提案#

このフィールドに依存するコードの再実装を検討してください。

例えば、以下のオリジナル CUDA* コードについて考えてみます。


1  void 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* コードに移行されます。


1  void 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  }

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


1  void 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  }