16 DistributedMpiGpuLibrary::Communicator descriptor{
sizeof(descriptor), 0, 0};
17 const auto found = options.find(
"mpi_communicator");
18 const auto *communicator = &descriptor;
19 if (found == options.end())
21 communicator =
nullptr;
25 const auto &value = found->second;
26 const auto parsed = std::from_chars(value.data(), value.data() + value.size(), descriptor.fortran_handle);
27 if (parsed.ec != std::errc{} || parsed.ptr != value.data() + value.size())
28 throw std::invalid_argument(
"Invalid MPI communicator handle");
30 return DistributedMpiGpuLibrary::GetInstance()->GenerateSeed(communicator);
32 throw std::runtime_error(
"MPI GPU execution requires Linux");
35 std::random_device entropy;
36 return std::uniform_int_distribution<uint64_t>{}(entropy);