// Copyright Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #pragma once #include namespace rocRoller { template std::vector::type> RandomGenerator::vector(uint nx, R min, R max) { using U = typename PackedTypeOf::type; std::vector x(nx); std::uniform_real_distribution<> udist(min, max); for(unsigned i = 0; i < nx; i++) { x[i] = static_cast(udist(m_gen)); } if constexpr(std::is_same_v) { return x; } if constexpr(std::is_same_v || std::is_same_v) { using F6x16 = std::conditional_t, FP6x16, BF6x16>; std::vector y(nx / 16); packF6x16(reinterpret_cast(y.data()), reinterpret_cast(x.data()), nx); return y; } if constexpr(std::is_same_v) { std::vector y(nx / 8); packFP4x8(reinterpret_cast(y.data()), reinterpret_cast(x.data()), nx); return y; } Throw("Unhandled packing/segmentation."); } template T RandomGenerator::next(T min, T max) { std::uniform_int_distribution dist(min, max); return dist(m_gen); } }