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 }

修正方法の提案

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