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  }