DPCT1085#

メッセージ#

関数 <function name> は sub-group サイズが <size> である必要がありますが、同じ SYCL* カーネル内のほかの sub-group 関数では異なる sub-group サイズが必要です。コードを調整する必要があります。

説明#

各カーネルは、1 つの sub-group サイズでしか修飾できません。この警告は、カーネルが異なる sub-group サイズを必要とする場合に出力されます。sub-group サイズを 1 つの値に統一できるかどうかを確認し、統一できない場合はコードのロジックを再設計します。

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

1 _global_ void kernel() { 
2 int Input, Output1, Output2, Lane; 
3...4 
5 // original code logic 
6 Output1 = __shfl(Input, Lane, 32); 
7 Output2 = __shfl_xor(Input, Lane, 16); 
8 }

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

1 void kernel(int WarpSize, sycl::nd_item<3> item_ct1) { 
2 int Input, Output1, Output2, Lane; 
3 ... 4 
5 // original code logic 
6 Output1 = Item_ct1.get_sub_group().shuffle(Input, Lane, 32); 
7 /* DPCT1085 */ 
8 Output2 = Item_ct1.get_sub_group().shuffle_xor(Input, Lane, 16); 
9 }

このコードを以下のように手動で調整します。

1 void kernel(int WarpSize, sycl::nd_item<3> item_ct1) { 
2 int Input, Output, SrcLane; 
3 ... 4 
5 // redesigned code logic 
6 Output1 = Item_ct1.get_sub_group().shuffle(Input, Lane, 32); 
7 /* DPCT1085 */ 
8 // redesign the code logic to unify sub-group size in the same kernel 
9 Output2 = Item_ct1.get_sub_group().shuffle_xor(Input, Lane, 32); 
10 }

修正方法の提案#

コードを手動で修正する必要があります。このコードを手動で書き換えてください。