DPCT1060#

メッセージ#

SYCL* レンジは、1D、2D、または 3D ベクトルにのみ移行できます。コードを調整します。

詳細な説明#

この警告は、元のコードのメモリーの次元数が 3 を超えると発行されます。SYCL* レンジは 1、2、3 次元のみをサポートするため、移行されたコードは SYCL* に準拠しません。

移行されたコードを修正するには、低次元配列を用いて高次元配列をシミュレートします。

次の変更例は、3D 配列によって 4D 配列をシミュレートする方法を示します。

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

1  __constant__ int const_array[dimX][dimY][dimZ][dimW]; 
2 
3  __global__ void kernel(int x, int y, int z, int w) { 
4     int a = const_array[x][y][z][w]; 
5  }

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

1   /* 
2   DPCT1060:0: SYCL range can only be a 1D, 2D, or 3D vector. Adjust the code. 
3  */ 
4  static dpct::constant_memory<int, 4> const_array(dimX, dimY, dimZ, dimW); 
5 
6  void kernel(int x, int y, int z, int w, 
7   sycl::accessor<int, 4, sycl::access_mode::read, sycl::access::target::device> const_array) { 
8   int a = const_array[x][y][z][w]; 
9  }

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

1  static dpct::constant_memory<int, 3> const_array(dimX, dimY, dimZ * dimW); 
2 
3  void kernel(int x, int y, int z, int w, 
4   sycl::accessor<int, 3, sycl::access_mode::read, sycl::access::target::device> const_array) { 
5   int a = const_array[x][y][w * dimZ + z]; 
6  }

修正方法の提案#

コードを修正する必要があります。