diff --git a/dpcpp/solver/idr_kernels.dp.cpp b/dpcpp/solver/idr_kernels.dp.cpp index dfd8ffd9af4..b9034842ceb 100644 --- a/dpcpp/solver/idr_kernels.dp.cpp +++ b/dpcpp/solver/idr_kernels.dp.cpp @@ -653,28 +653,22 @@ void initialize_subspace_vectors(std::shared_ptr exec, std::ranlux48(15)); subspace_vectors->read(subspace_vectors_data); } else { - auto size = subspace_vectors->get_size(); - auto stride = subspace_vectors->get_stride(); - auto values = subspace_vectors->get_values(); + auto seed = time(NULL); + auto work = reinterpret_cast *>( + subspace_vectors->get_values()); + auto n = + subspace_vectors->get_size()[0] * subspace_vectors->get_stride(); + n = is_complex() ? 2 * n : n; exec->get_queue()->submit([&](sycl::handler &cgh) { - cgh.parallel_for( - sycl::range<1>(size[0] * size[1]), [=](sycl::item<1> idx) { - std::uint64_t offset = idx.get_linear_id(); - - // Create minstd_rand engine - oneapi::dpl::minstd_rand engine(132, offset); - - // Create uniform_real_distribution distribution - oneapi::dpl::uniform_real_distribution< - remove_complex> - distr; - - // Generate random number - auto res = distr(engine); - - // Store results to x_acc - values[idx / size[1] * stride + idx % size[1]] = res; - }); + cgh.parallel_for(sycl::range<1>(n), [=](sycl::item<1> idx) { + std::uint64_t offset = idx.get_linear_id(); + oneapi::dpl::minstd_rand engine(seed, offset); + oneapi::dpl::normal_distribution> + distr(0, 1); + auto res = distr(engine); + + work[idx] = res; + }); }); } }