DPCT1085

メッセージ

関数 %0 はサブグループ・サイズを %1 にする必要がありますが、同じ DPC++ カーネルのほかのサブグループ関数は異なるサブグループ・サイズを必要とします。コードを調整する必要があります。

説明

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// original code:

_global_ void kernel() {
  int Input, Output1, Output2, Lane;
  ...

  // original code logic
  Output1 = __shfl(Input, Lane, 32);
  Output2 = __shfl_xor(Input, Lane, 16);
}

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// migrated DPC++ code:

void kernel(int WarpSize, sycl::nd_item<3> item_ct1) {
  int Input, Output1, Output2, Lane;
  ...

  // original code logic
  Output1 = Item_ct1.get_sub_group().shuffle(Input, Lane, 32);
  /* DPCT1085 */
  Output2 = Item_ct1.get_sub_group().shuffle_xor(Input, Lane, 16);
}

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// adjusted DPC++ code:

void kernel(int WarpSize, sycl::nd_item<3> item_ct1) {
  int Input, Output, SrcLane;
  ...

  // redesigned code logic
  Output1 = Item_ct1.get_sub_group().shuffle(Input, Lane, 32);
  /* DPCT1085 */
  // redesign the code logic to unify subgroup size in the same kernel
  Output2 = Item_ct1.get_sub_group().shuffle_xor(Input, Lane, 32);
}

修正方法の提案

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