fallback to clock seed if std::random_device is not a true RNG

This commit is contained in:
slaren 2024-09-10 17:33:10 +02:00
parent 4516c75baa
commit 435dfa33b8

View file

@ -8,6 +8,7 @@
#include <cstring> #include <cstring>
#include <ctime> #include <ctime>
#include <cfloat> #include <cfloat>
#include <chrono>
#include <cmath> #include <cmath>
#include <numeric> #include <numeric>
#include <random> #include <random>
@ -164,6 +165,11 @@ static void llama_sampler_top_k_impl(llama_token_data_array * cur_p, int32_t k)
static uint32_t get_rng_seed(uint32_t seed) { static uint32_t get_rng_seed(uint32_t seed) {
if (seed == LLAMA_DEFAULT_SEED) { if (seed == LLAMA_DEFAULT_SEED) {
// use system clock if std::random_device is not a true RNG
static bool is_rd_prng = std::random_device().entropy() == 0;
if (is_rd_prng) {
return (uint32_t) std::chrono::system_clock::now().time_since_epoch().count();
}
std::random_device rd; std::random_device rd;
return rd(); return rd();
} }