DPCT1101
目次
DPCT1101#
メッセージ#
<式テキスト> は値に置き換えられました。コメントで示される元の式が正しい場合、その式を使用するようにコードを変更します。
詳細な説明#
移行された SYCL* コードで使用される定数の変数名、タイプ、マクロなどの ID は、コードスコープでは利用できない可能性があるため、値で置き換えられます。ユーザーは、コードスコープで ID が利用できることを確認して、値をコメントで示される元の式に手動で書き戻すことができます。
修正方法の提案#
マクロまたは const 変数を使用して値を置き換えます。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 __global__ void f() {
2 const int x = 2;
3 __shared__ int fold[x];
4 ...
5 }
6
7 int main() {
8 f<<<1, 1>>>();
9 return 0;
10 }
このコードは、以下の SYCL* コードに移行されます。
1 void f(int *fold) {
2 const int x = 2;
3 ...
4 }
5
6 int main() {
7 dpct::get_in_order_queue().submit([&](sycl::handler &cgh) {
8 /*
9 DPCT1101:0: 'x' expression was replaced with a value. Modify the code to
10 use the original expression, provided in comments, if it is correct.
11 */
12 sycl::local_accessor<int, 1> fold_acc_ct1(sycl::range<1>(2 /*x*/), cgh);
13
14 cgh.parallel_for(
15 sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)),
16 [=](sycl::nd_item<3> item_ct1) {
17 f(fold_acc_ct1.get_pointer());
18 });
19 });
20 return 0;
21 }
このコードは次のように書き換えられます。
1 const int x = 2;
2 void f(int *fold) {
3 ...
4 }
5
6 int main() {
7 dpct::get_in_order_queue().submit([&](sycl::handler &cgh) {
8 sycl::local_accessor<int, 1> fold_acc_ct1(sycl::range<1>(x), cgh);
9
10 cgh.parallel_for(
11 sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)),
12 [=](sycl::nd_item<3> item_ct1) {
13 f(fold_acc_ct1.get_pointer());
14 });
15 });
16 return 0;
17 }