DPCT1064#

メッセージ#

移行した <function name> の呼び出しは、マクロ定義で使用されていますが、すべてのマクロの使用に対して有効ではありません。コードを調整します。

詳細な説明#

この警告は、関数呼び出しがマクロ定義で使用され、マクロ呼び出しの方法に応じて異なる方法で移行する必要がある場合に生成されます。インテル® DPC++ 互換性ツールは、マクロ呼び出しの 1 つに対して有効なコードを生成できますが、コード内でそのマクロのすべての呼び出しでは有効でない可能性があります。

以下に例を示します。pow 関数は、マクロ引数で渡されるパラメーターのタイプに応じて、sycl::pow<double> または sycl::pown に移行できます。

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

1  #define POW(B, E) pow(B, E) 
2  __device__ void foo() { 
3   double a = POW(2.5, 3.1); 
4   double b = POW(2.5, 2); 
5  }

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

1  /* 
2  DPCT1064:0: Migrated pow call is used in a macro/template definition and may not 
3  be valid for all macro/template uses. Adjust the code. 
4  */ 
5  #define POW(B, E) dpct::pow(B, E) 
6  void foo() { 
7   double a = POW(2.5, 3.1); 
8   double b = POW(2.5, 2); 
9  }

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

1  void foo() { 
2   double a = POW(2.5, 3.1); 
3   double b = 2.5 * 2.5; 
4  }

修正方法の提案#

移行されたコード内のマクロ呼び出しの使用例に対応する新しいマクロを宣言します。