DPCT1060
目次
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* レンジは、1D、2D、または 3D ベクトルにのみ移行できます。コードを調整します。3*/
4static dpct::constant_memory<int, 4> const_array(dimX, dimY, dimZ, dimW);
5
6void 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}
このコードは次のように書き換えられます。
1static dpct::constant_memory<int, 3> const_array(dimX, dimY, dimZ * dimW);
2
3void 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}
修正方法の提案
コードを修正する必要があります。