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  }