DPCT1098#

メッセージ

<expression text> 式は、<function name> 呼び出しの代わりに使用されます。この 2 つの式は同じ機能を提供するものではありません。生成されたコードに精度やパフォーマンスの潜在的な問題がないか確認してください。

詳細な説明

関数と厳密に同等な機能が SYCL* で提供されていないため、ほかの関数で構成される式が導入されました。コードの精度やパフォーマンスが期待どおりにならない可能性があります。コードの正当性およびパフォーマンスを検証してください。

修正方法の提案

コードの正当性およびパフォーマンスを検証してください。

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

1  __device__ void device(float *f) { 
2   float a = __ldg(f); 
3  }

このコードは、以下の SYCL* コードに移行されます。

1  void device(float *f) { 
2   /* 
3   DPCT1098:0: The '*' expression is used instead of the __ldg call. These two 
4   expressions do not provide the exact same functionality.Check the generated 
5   code for potential precision and/or performance issues.
6   */ 
7   float a = *f; 
8  }

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

1  void device(float *f) { 
2  #if defined(__NVPTX__) && defined(__SYCL_DEVICE_ONLY__) 
3   float a = sycl::ext::oneapi::experimental::cuda::ldg(f); 
4  #else 
5   float a = *f; 
6  #endif 
7  }