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 }
修正方法の提案#
コードを手動で修正する必要があります。このコードを手動で書き換えてください。