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 }

修正方法の提案#

このコードを手動で書き換えてください。