DPCT1088¶
メッセージ¶
マクロ定義には、統一できなかったフリークエリー関数の次元の複数の移行結果があります。コードを変更する必要があります。
説明¶
インテル® DPC++ 互換性ツールは、コードを正しく移行できませんでした。手動でコードを変更する必要があります。
例えば、以下のオリジナルコードについて考えてみます。
1 2 3 4 5 6 7 8 9 10 11 12 | // original code:
#define TB(x) cg::thread_block x = cg::this_thread_block()
__global__ void kernel1() {
int id = threadIdx.x;
TB(a);
}
__global__ void kernel3() {
int id = threadIdx.z;
TB(b);
}
|
このコードを --assume-nd-range-dim=1
オプションと --use-experimental-features=free-function-queries
オプションで移行すると、以下の DPC++ コードに移行されます。
1 2 3 4 5 6 7 8 9 10 11 | #define TB(x) auto x = sycl::this_group< Placeholder /* Fix the dimension manually */>()
// It should be this_group<1>() when used in kernel1 and this_group<3>() when used in kernel3
void kernel1() {
int id = sycl::this_nd_item<1>().get_local_id(0);
TB(a);
}
void kernel3() {
int id = sycl::this_nd_item<3>().get_local_id(0);
TB(b);
}
|
このコードを以下のように手動で調整します。
1 2 3 4 5 6 7 8 9 10 11 12 | // fixed DPC++ code:
#define TB(x, dimensions) auto x = sycl::this_group< dimensions >()
void kernel1() {
int id = sycl::this_nd_item<1>().get_local_id(0);
TB(a, 1);
}
void kernel3() {
int id = sycl::this_nd_item<3>().get_local_id(0);
TB(b, 3);
}
|
修正方法の提案¶
このコードを手動で書き換えてください。