DPCT1084#
メッセージ#
<function name>
関数呼び出しには、統一できなかった異なるテンプレート・インスタンスの複数の移行結果があります。コードを調整する必要があります。
説明#
インテル® DPC++ 互換性ツールは、コードを正しく移行できませんでした。コードを手動で変更してください。
以下の例では、オリジナルコード、移行したコード、移行したコードを修正するために行った手動の変更を示します。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 __constant__ int4 example_i[32];
2 __constant__ float4 example_f[32];
3
4 struct example_int {
5 __device__ int4 foo(int idx) const {
6 return example_i[idx];
7 }
8 };
9
10 struct example_float {
11 __device__ float4 foo(int idx) const {
12 return example_f[idx];
13 }
14 };
15
16 template <typename T>
17 _global_ void example_kernel() {
18...19 T example_v;
20 float j = example_v.foo(idx).x;
21 }
このコードは、以下の SYCL* コードに移行されます。
1 dpct::constant_memory<sycl::int4, 1> example_i(32);
2 dpct::constant_memory<sycl::float4, 1> example_f(32);
3
4 struct example_int {
5 sycl::int4 foo()(int idx, sycl::int4 *example_i) const {
6 return example_i[idx];
7 }
8 };
9
10 struct example_float {
11 sycl::float4 foo()(int idx, sycl::float4 *example_i) const {
12 return example_i[idx];
13 }
14 };
15
16 template <typename T>
17 void example_kernel(sycl::nd_item<3> item_ct1, sycl::float4 *example_f) {
18 ... 19 T example_v;
20 /* DPCT1083 */
21 float j = example_v.foo(idx, example_f).x();
22 }
このコードを以下のように手動で調整します。
1 dpct::constant_memory<sycl::int4, 1> example_i(32);
2 dpct::constant_memory<sycl::float4, 1> example_f(32);
3
4 struct example_int {
5 typedef sycl::int4 data_type;
6 sycl::int4 foo()(int idx, sycl::int4 *example_i) const {
7 return example_i[idx];
8 }
9 };
10
11 struct example_float {
12 typedef sycl::float4 data_type;
13 sycl::float4 foo()(int idx, sycl::float4 *example_i) const {
14 return example_i[idx];
15 }
16 };
17
18 template <typename T>
19 void example_kernel(sycl::nd_item<3> item_ct1, typename T::data_type *example_f) {
20 ... 21 T example_v;
22 /* DPCT1083 */
23 float j = example_v.foo(idx, example_f).x();
24 }
修正方法の提案#
コードを手動で調整する必要があります。