35 template<
class T,
class Engine = std::mt19937>
36 T mock_gaussian(Engine &eng) {
37 using namespace shambase::constants;
39 constexpr T _2pi = pi<T> * 2;
40 T r_3 = shamalgs::primitives::mock_value<T>(eng, 0, 1);
41 T r_4 = shamalgs::primitives::mock_value<T>(eng, 0, 1);
42 return sycl::sqrt(-2 * sycl::log(r_3)) * sycl::cos(_2pi * r_4);
45 template<
class T,
class Engine = std::mt19937>
46 T mock_gaussian_multidim(Engine &eng) {
49 using Tscal = shambase::VecComponent<T>;
51 for (
int i = 0; i < n; i++) {
52 ret[i] = mock_gaussian<Tscal>(eng);
57 template<
class T,
class Engine = std::mt19937>
58 T mock_unit_vector(Engine &eng) {
59 T ret = mock_gaussian_multidim<T>(eng);
60 auto len = sycl::length(ret);
62 auto default_unit_vec = []() {
68 return (len > 0) ? (ret / len) : default_unit_vec();
72 sycl::buffer<T> mock_buffer(
u64 seed,
u32 len, T min_bound, T max_bound);
76 const sham::DeviceScheduler_ptr &sched,
u64 seed,
u32 len, T min_bound, T max_bound);
80 const sham::DeviceScheduler_ptr &sched,
u64 seed,
u32 len) {
82 return mock_buffer_usm(sched, seed, len, Prop::get_min(), Prop::get_max());
86 inline sycl::buffer<T> mock_buffer(
u64 seed,
u32 len) {
88 return mock_buffer(seed, len, Prop::get_min(), Prop::get_max());
92 inline std::unique_ptr<sycl::buffer<T>> mock_buffer_ptr(
93 u64 seed,
u32 len, T min_bound, T max_bound) {
94 return std::make_unique<sycl::buffer<T>>(mock_buffer(seed, len, min_bound, max_bound));
97 inline std::unique_ptr<sycl::buffer<T>> mock_buffer_ptr(
u64 seed,
u32 len) {
99 return mock_buffer_ptr(seed, len, Prop::get_min(), Prop::get_max());