DPCT1050

メッセージ

<type> のテンプレート引数を推測できませんでした。このコードを更新する必要があります。

詳細な説明

この警告は、このタイプの変数がコードで直接使用されていないため、インテル® DPC++ 互換性ツールがテンプレート引数を推測できなかった場合に生成されます。インテル® DPC++ 互換性ツールは、このような場合、タイプの代わりに「dpct_placeholder」を挿入します。

修正方法の提案

「dpct_placeholder」を実際の引数に置き換えます。

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

1 __global__ void kernel(const cudaTextureObject_t texObj) {} 
2 
3 void foo() { 
4 float4 *d_data42; 
5 cudaArray_t a42; 
6 cudaMalloc(&d_data42, sizeof(float4) * 32 * 32); 
7 cudaChannelFormatDesc desc42 = cudaCreateChannelDesc(32, 32, 32, 32, cudaChannelFormatKindFloat); 
8 cudaMallocArray(&a42, &desc42, 32, 32); 
9 cudaMemcpyToArray(a42, 0, 0, d_data42, 32 * 32 * sizeof(float4), cudaMemcpyDeviceToDevice); 
10 cudaTextureObject_t tex42; 
11 cudaResourceDesc res42; 
12 cudaTextureDesc texDesc42; 
13 res42.resType = cudaResourceTypeArray; 
14 res42.res.array.array = a42; 
15 cudaCreateTextureObject(&tex42, &res42, &texDesc42, NULL); 
16 kernel<<<1, 1>>>(tex42); 
17 }

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

1 /* 
2 DPCT1050:1: The template argument of the image_accessor_ext could not be 
3 deduced. You need to update this code. 
4 */ 
5 void kernel(const dpct::image_accessor_ext< 
6 dpct_placeholder /*Fix the type manually*/, 1> 
7 texObj) {} 
8 
9 void foo() { 
10 dpct::device_ext &dev_ct1 = dpct::get_current_device(); 
11 sycl::queue &q_ct1 = dev_ct1.default_queue(); 
12 sycl::float4 *d_data42; 
13 dpct::image_matrix_p a42; 
14 d_data42 = (sycl::float4 *)sycl::malloc_device(sizeof(sycl::float4) * 32 * 32, 
15 q_ct1); 
16 dpct::image_channel desc42 = 
17 dpct::image_channel(32, 32, 32, 32, dpct::image_channel_data_type::fp); 
18 a42 = new dpct::image_matrix(desc42, sycl::range<2>(32, 32)); 
19 dpct::dpct_memcpy(a42->to_pitched_data(), sycl::id<3>(0, 0, 0), 
20 dpct::pitched_data(d_data42, 32 * 32 * sizeof(sycl::float4), 
21 32 * 32 * sizeof(sycl::float4), 1), 
22 sycl::id<3>(0, 0, 0), 
23 sycl::range<3>(32 * 32 * sizeof(sycl::float4), 1, 1)); 
24 dpct::image_wrapper_base_p tex42; 
25 dpct::image_data res42; 
26 dpct::sampling_info texDesc42; 
27 
28 res42.set_data(a42); 
29 tex42 = dpct::create_image_wrapper(res42, texDesc42); 
30 /* 
31 DPCT1050:0: The template argument of the image_accessor_ext could not be 
32 deduced. You need to update this code. 
33 */ 
34 q_ct1.submit([&](sycl::handler &cgh) { 
35 auto tex42_acc = static_cast<dpct::image_wrapper< 
36 dpct_placeholder /*Fix the type manually*/, 1> *>(tex42) 
37 ->get_access(cgh); 
38 
39 auto tex42_smpl = tex42->get_sampler(); 
40 
41 cgh.parallel_for( 
42 sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)), 
43 [=](sycl::nd_item<3> item_ct1) { 
44 kernel(dpct::image_accessor_ext< 
45 dpct_placeholder /*Fix the type manually*/, 1>(tex42_smpl, 
46 tex42_acc)); 
47 }); 
48 }); 
49 }

このコードは次のように書き換えられます。


1 void kernel(const dpct::image_accessor_ext<sycl::float4, 2> texObj) {}
2 
3 void foo() { 
4 dpct::device_ext &dev_ct1 = dpct::get_current_device(); 
5 sycl::queue &q_ct1 = dev_ct1.default_queue(); 
6 sycl::float4 *d_data42; 
7 dpct::image_matrix_p a42; 
8 d_data42 = (sycl::float4 *)sycl::malloc_device(sizeof(sycl::float4) * 32 * 32, 
9 q_ct1); 
10 dpct::image_channel desc42 = 
11 dpct::image_channel(32, 32, 32, 32, dpct::image_channel_data_type::fp); 
12 a42 = new dpct::image_matrix(desc42, sycl::range<2>(32, 32)); 
13 dpct::dpct_memcpy(a42->to_pitched_data(), sycl::id<3>(0, 0, 0), 
14 dpct::pitched_data(d_data42, 32 * 32 * sizeof(sycl::float4), 
15 32 * 32 * sizeof(sycl::float4), 1), 
16 sycl::id<3>(0, 0, 0), 
17 sycl::range<3>(32 * 32 * sizeof(sycl::float4), 1, 1)); 
18 dpct::image_wrapper_base_p tex42; 
19 dpct::image_data res42; 
20 dpct::sampling_info texDesc42; 
21 
22 res42.set_data(a42); 
23 tex42 = dpct::create_image_wrapper(res42, texDesc42); 
24 
25 q_ct1.submit([&](sycl::handler &cgh) { 
26 auto tex42_acc = 
27 static_cast<dpct::image_wrapper<sycl::float4, 2> *>(tex42)->get_access(
28 cgh); 
29 
30 auto tex42_smpl = tex42->get_sampler(); 
31 
32 cgh.parallel_for( 
33 sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)), 
34 [=](sycl::nd_item<3> item_ct1) { 
35 kernel( 
36 dpct::image_accessor_ext<sycl::float4, 2>(tex42_smpl, tex42_acc));
37 }); 
38 }); 
39 }