DPCT1112
目次
DPCT1112#
メッセージ#
フィルターモードが linear に設定されていると、イメージの “リード” 動作は、元のコードの tex1Dfetch とは異なる可能性があります。ソースコードの調整が必要な場合があります。
詳細な説明#
CUDA* tex1Dfetch 関数は、最も近いフィルターモードを適用します。移行後のコードでは、イメージの読み取り関数はテクスチャー・オブジェクトに設定されるフィルターモードを適用します。読み取り後のイメージは異なる結果になる可能性があるため、イメージの読み取りでフィルターモードを調整することが必要な場合があります。
修正方法の提案#
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 cudaTextureDesc desc;
2 desc.filterMode = cudaFilterModeLinear;
3 ...
4 cudaTextureObject_t obj;
5 cudaCreateTextureObject(&obj, ..., &desc, ...);
6 ...
7 tex1Dfetch(..., obj, ...);
このコードは、以下の SYCL* コードに移行されます。
1 dpct::sampling_info desc;
2 desc.set(sycl::filtering_mode::linear);
3 ...
4 dpct::image_wrapper_base_p obj;
5 obj = dpct::create_image_wrapper(..., desc);
6 ...
7 /*
8 DPCT1112:0: If the filter mode is set to 'linear', the behavior of image
9 "read" may be different from "tex1Dfetch" in the original code.You may need
10 to adjust the code.
11 */
12 obj.read(...);
このコードは次のように書き換えられます。
1 dpct::sampling_info desc;
2 desc.set(sycl::filtering_mode::nearest); // Update the filtering mode from linear to nearest
3 ...
4 dpct::image_wrapper_base_p obj;
5 obj = dpct::create_image_wrapper(..., desc);
6 ...