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: 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}

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


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}