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* コードに移行されます。

1  void kernel() { 
2   /* 
3   DPCT1032:0: A different random number generator is used.You may need to adjust the code.
4   */ 
5   dpct::rng::device::rng_generator<oneapi::mkl::rng::device::mcg59<1>> rng1; 
6   /* 
7   DPCT1105:1: The mcg59 random number generator is used.The subsequence argument "2" is ignored.You need to verify the migration.
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 }

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

1  void 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  }