DPCT1105#
メッセージ#
mcg59 乱数ジェネレーターが使用されています。後続の引数 <expression> は無視されます。移行を検証する必要があります。
説明#
mcg59 乱数ジェネレーターは、subsequence パラメーターをサポートしていません。subsequence パラメーターを使用する場合、代わりに philox4x32x10 乱数ジェネレーターを使用できます。
修正方法の提案#
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1__global__ void kernel() {
2 unsigned int u;
3 curandStateXORWOW_t rng1;
4 curand_init(1, 2, 3, &rng1);
5 u = curand(&rng1);
6}
このコードは、以下の SYCL* コードに移行されます。
1void kernel() {
2 /*
3 DPCT1032:0: 異なる乱数ジェネレーターが使用されています。コードを調整する必要があります。
4 */
5 dpct::rng::device::rng_generator<oneapi::mkl::rng::device::mcg59<1>> rng1;
6 /*
7 DPCT1105:1: mcg59 乱数ジェネレーターが使用されています。後続の引数 2 は無視されます。移行を検証する必要があります。
8 */
9 rng1 = dpct::rng::device::rng_generator<oneapi::mkl::rng::device::mcg59<1>>(1, 3);
10 u = rng1.generate<oneapi::mkl::rng::device::uniform_bits<std::uint32_t>, 1>();
11}
このコードは次のように書き換えられます。
1void kernel() {
2 dpct::rng::device::rng_generator<oneapi::mkl::rng::device::mcg59<1>> rng1;
3 rng1 = dpct::rng::device::rng_generator<oneapi::mkl::rng::device::mcg59<1>>(1, 3);
4 u = rng1.generate<oneapi::mkl::rng::device::uniform_bits<std::uint32_t>, 1>();
5}