parallel-processing - random_number() 如何并行工作?

标签 parallel-processing fortran

random_number() 如何与 OpenMP 并行工作?

如果我在没有并行化的情况下运行程序,我总是得到相同的结果,但是通过并行化,我每次都会得到不同(但相似)的结果。

最佳答案

一般来说,无法保证 random_number 的线程安全或线程性能。 Fortran 标准根本不支持 OpenMP。

各个编译器可能会为您提供一些保证,但它们仅对特定编译器中存在的版本有效。例如,当前的 gfortran 版本提供了线程安全的随机数生成器和 "Note that in a multi-threaded program (e.g. using OpenMP directives), each thread will have its own random number state."其他编译器可能有所不同。值得注意的是,您的用户可能想要使用的编译器可能有所不同,而您可能不知道这一点。

有专用的并行随机数生成器可用。例如,我使用modified使用 Ziggurat 方法处理多个随机数分布的库版本由 Gib Bogle 并行化,我添加了 xoroshiro128+ 的实现作为底层算法,类似于 Gfortran 使用的算法。还有类似算法的其他实现可用,并且标准 C++ 包含一些新的生成器,这些生成器实际上被定义为使用特定算法,因此您可以调用它们。

关于parallel-processing - random_number() 如何并行工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60075931/

相关文章:

parallel-processing - Omp 部分与 Omp 工作共享

sql - 在 Postgresql 中为 SELECT INTO 使用并行查询执行

visual-studio-code - 带有 Intel Fortran 调试器的 VSCode : debugging window doesn't show allocatable variables

floating-point - x86_64 和 ARMv8.2-A 之间不同的浮点计算结果

c++ - 在这个 C++ 函数中更新 Fortran 中的两个数组

arrays - Fortran 中模块或主程序数组必须具有常量形状错误

scala - 为什么 Scala Futures 一次只运行 2 个?

c# - task.Wait 抛出异常

c++ - 将 Fortran 中的 Peng Robinson 方程代码转换为 C++

c++ - start_thread 克隆在并行程序中占用了大部分时间 - 并行化错误或报告错误?