parallel-processing - random_number() 如何并行工作?
问题描述
如何random_number()
与 OpenMP 并行工作?
如果我在没有并行化的情况下运行我的程序,我总是会得到相同的结果,但是通过并行化,我每次都会得到不同(但相似)的结果。
解决方案
一般来说,不能保证线程安全或线程性能random_number
。Fortran 标准根本不了解 OpenMP。
个别编译器可能会为您提供一些保证,但它们仅对特定编译器中存在的版本有效。例如,当前的 gfortran 版本提供了一个线程安全的随机数生成器,并且“请注意,在多线程程序中(例如,使用 OpenMP 指令),每个线程都有自己的随机数状态。” 其他编译器可能会有所不同。值得注意的是,您的用户可能想要使用的编译器可能会有所不同,而您可能对此一无所知。
有专用的并行随机数生成器可用。例如,我使用库的修改版本,该库使用 Ziggurat 方法处理多个随机数分布,由 Gib Bogle 并行化,我添加了 xoroshiro128+ 的实现作为底层算法,类似于 Gfortran 使用的算法。还有其他类似算法的实现可用,标准 C++ 包含一些新生成器,这些生成器实际上被定义为使用特定算法,因此您可以调用它们。
推荐阅读
- python - 删除列表列表中“”中的空格
- r - 两个“位置”不同的条形聊天中条形的高度代表什么?
- javascript - 如何从 sequelize findAll 结果修改虚拟字段?
- python - Python - Pandas:如何在呈指数增长的值之间进行插值?
- python - Python 如何等待 5 秒?
- python - 如何*旋转* Seaborn PairGrid 中的标签?
- azure - 可以在 azure pipeline 中找到下载文件
- c - C scanf() 函数,如何在 EOF/EOT 上终止?
- visual-studio - .NET 5 在 Visual Studio 2019 中不可用
- pandas - 如何将数据框列与熊猫中的数据框列相乘?