DPCT1127#

メッセージ#

C++20 でコンパイルする場合、device_global 定数のコンパイル時初期化がサポートされます。コンパイルコマンドを調整する必要があるかもしれません。

詳細な説明#

device_global 拡張機能は、C++ グローバル変数に似た構文を使用してカーネル内でアクセスできる、SYCL* へのデバイス・スコープ・メモリー割り当てを可能にします。C++20 でコンパイルする場合、device_global 定数のコンパイル時初期化がサポートされます。次を参照してください: https://github.com/intel/llvm/blob/sycl/sycl/doc/extensions/experimental/sycl_ext_oneapi_device_global.asciidoc (英語)。

修正方法の提案#

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

1  // test.cu 
2  __constant__ int var = 0; 
3  __global__ void kernel(int* ptr) { 
4   *ptr = var; 
5  }

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

1  // test.dp.cpp 
2  /* 
3  DPCT1127:0: The constant compile-time initialization for device_global is 
4  supported when compiling with C++20.You may need to adjust the compile 
5  commands.
6  */ 
7  static sycl::ext::oneapi::experimental::device_global<const int> var{0}; 
8  void kernel(int* ptr) { 
9   *ptr = var.get(); 
10 }

コンパイルコマンドを次のように変更する必要があります。

1  icpx -fsycl -std=c++20 test.dp.cpp # Linux* 
2  icx-cl -fsycl -Qstd=c++20 test.dp.cpp # Windows*