DPCT1074
目次
DPCT1074#
メッセージ#
SYCL* イメージクラスは、オリジナルコードで使用されている一部のフラグをサポートしていません。サポートされないフラグは無視されます。SYCL* イメージから読み取られたデータは、元のコードで指定されるように正規化できませんでした。
詳細な説明#
CU_TRSF_READ_AS_INTEGER が設定されていない限り、元のコード内の tex から読み取られたデータは、デフォルトで (0, 1] の範囲の浮動小数点数に正規化されます。SYCL* イメージから読み取ったデータを、標準の SYCL* API を使用して (0, 1] の範囲の浮動小数点に正規化することができません。オリジナルコードで使用されているフラグは、座標正規化モードを除いてすべて無視されます。
修正方法の提案
コードを手動で調整してください。
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 // User does not set CU_TRSF_READ_AS_INTEGER here.
2 cuTexRefSetFlags(tex, CU_TRSF_NORMALIZED_COORDINATES);
3 cuTexRefSetFormat(tex, CU_AD_FORMAT_UNSIGNED_INT16, 1);
4 ...
5 result = tex2D<float>(tex, 0.5f, 0.5f);
このコードは、以下の SYCL* コードに移行されます。
1 /*
2 DPCT1074:0: The SYCL Image class does not support some of the flags used in
3 the original code. Unsupported flags were ignored. Data read from SYCL Image
4 could not be normalized as specified in the original code.
5 */
6 tex->set(sycl::coordinate_normalization_mode::normalized);
7 tex->set_channel_type(sycl::image_channel_type::unsigned_int16);
8 tex->set_channel_num(1);
9 ...
10 result = tex.read(0.5f, 0.5f); // data normalization does not match original code
このコードを以下のように手動で調整します。
1 tex->set(sycl::coordinate_normalization_mode::normalized);
2 tex->set_channel_type(sycl::image_channel_type::unsigned_int16);
3 tex->set_channel_num(1);
4 ...
5 result = tex.read(0.5f, 0.5f) / float(std::numeric_limits<std::uint16_t>::max());