Fix handling of RNG seed

* Fix truncation of output seed value from 64 bits to 32 bits (int
  instead of uint64) when written to json file.

* Fix input seed value conversion when --seed option is used.

* Remove input seed value scrambling (use of rngseed()) when --seed
  or --randomize-seed option is used since the output seed value will
  be the scrambled value and not the seed that was actually supplied
  or generated.
This commit is contained in:
Jonas Thörnblad 2024-09-17 13:12:06 +02:00 committed by myrtle
parent 2627d4e0ad
commit 6ca64526bb

View File

@ -343,7 +343,7 @@ po::options_description CommandHandler::getGeneralOptions()
general.add_options()("json", po::value<std::string>(), "JSON design file to ingest"); general.add_options()("json", po::value<std::string>(), "JSON design file to ingest");
general.add_options()("write", po::value<std::string>(), "JSON design file to write"); general.add_options()("write", po::value<std::string>(), "JSON design file to write");
general.add_options()("top", po::value<std::string>(), "name of top module"); general.add_options()("top", po::value<std::string>(), "name of top module");
general.add_options()("seed", po::value<int>(), "seed value for random number generator"); general.add_options()("seed", po::value<uint64_t>(), "seed value for random number generator");
general.add_options()("randomize-seed,r", "randomize seed value for random number generator"); general.add_options()("randomize-seed,r", "randomize seed value for random number generator");
general.add_options()( general.add_options()(
@ -447,7 +447,7 @@ void CommandHandler::setupContext(Context *ctx)
} }
if (vm.count("seed")) { if (vm.count("seed")) {
ctx->rngseed(vm["seed"].as<int>()); ctx->rngstate = vm["seed"].as<uint64_t>();
} }
if (vm.count("threads")) { if (vm.count("threads")) {
@ -456,10 +456,10 @@ void CommandHandler::setupContext(Context *ctx)
if (vm.count("randomize-seed")) { if (vm.count("randomize-seed")) {
std::random_device randDev{}; std::random_device randDev{};
std::uniform_int_distribution<int> distrib{1}; std::uniform_int_distribution<uint64_t> distrib{1};
auto seed = distrib(randDev); auto seed = distrib(randDev);
ctx->rngseed(seed); ctx->rngstate = seed;
log_info("Generated random seed: %d\n", seed); log_info("Generated random seed: %lu\n", seed);
} }
if (vm.count("slack_redist_iter")) { if (vm.count("slack_redist_iter")) {
@ -565,7 +565,7 @@ void CommandHandler::setupContext(Context *ctx)
ctx->settings[ctx->id("arch.name")] = std::string(ctx->archId().c_str(ctx)); ctx->settings[ctx->id("arch.name")] = std::string(ctx->archId().c_str(ctx));
ctx->settings[ctx->id("arch.type")] = std::string(ctx->archArgsToId(ctx->archArgs()).c_str(ctx)); ctx->settings[ctx->id("arch.type")] = std::string(ctx->archArgsToId(ctx->archArgs()).c_str(ctx));
ctx->settings[ctx->id("seed")] = ctx->rngstate; ctx->settings[ctx->id("seed")] = Property(ctx->rngstate, 64);
if (ctx->settings.find(ctx->id("placerHeap/alpha")) == ctx->settings.end()) if (ctx->settings.find(ctx->id("placerHeap/alpha")) == ctx->settings.end())
ctx->settings[ctx->id("placerHeap/alpha")] = std::to_string(0.1); ctx->settings[ctx->id("placerHeap/alpha")] = std::to_string(0.1);