DPCT1088#
メッセージ#
マクロ定義には、統一できなかったフリークエリー関数の次元の複数の移行結果があります。コードを変更する必要があります。
説明#
インテル® DPC++ 互換性ツールは、コードを正しく移行できませんでした。手動でコードを変更する必要があります。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 #define TB(x) cg::thread_block x = cg::this_thread_block()
2
3 __global__ void kernel1() {
4 int id = threadIdx.x;
5 TB(a);
6 }
7 __global__ void kernel3() {
8 int id = threadIdx.z;
9 TB(b);
10 }
--assume-nd-range-dim=1
および --use-experimental-features=free-function-queries
オプションを指定して移行すると、次のような SYCL* コードが生成されます。
1 #define TB(x) auto x = sycl::this_group< Placeholder /* Fix the dimension manually */>()
2 // It should be this_group<1>() when used in kernel1 and this_group<3>() when used in kernel3
3
4 void kernel1() {
5 int id = sycl::this_nd_item<1>().get_local_id(0);
6 TB(a);
7 }
8 void kernel3() {
9 int id = sycl::this_nd_item<3>().get_local_id(0);
10 TB(b);
11 }
このコードを以下のように手動で調整します。
1 #define TB(x, dimensions) auto x = sycl::this_group< dimensions >()
2
3 void kernel1() {
4 int id = sycl::this_nd_item<1>().get_local_id(0);
5 TB(a, 1);
6 }
7 void kernel3() {
8 int id = sycl::this_nd_item<3>().get_local_id(0);
9 TB(b, 3);
10 }
修正方法の提案#
このコードを手動で書き換えてください。