Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 如何用Fortran编写并行安全随机数发生器_Parallel Processing_Fortran - Fatal编程技术网

Parallel processing 如何用Fortran编写并行安全随机数发生器

Parallel processing 如何用Fortran编写并行安全随机数发生器,parallel-processing,fortran,Parallel Processing,Fortran,这是问题的后续行动 我发现Random_number()对于并行编程来说是不可靠的,它给出了不可再现的结果,并且我的程序严重依赖于随机数 如何用Fortran编写并行安全的随机数生成器 或者在哪里可以找到它?自Fortran 2018以来,可以初始化调用映像的伪随机数生成器,以便伪随机数序列与执行类似语句的其他映像的伪随机数序列不同,并且在后续执行程序时也会不同 CALL RANDOM_INIT (REPEATABLE=.FALSE., IMAGE_DISTINCT=.TRUE.) 在中提供

这是问题的后续行动

我发现
Random_number()
对于并行编程来说是不可靠的,它给出了不可再现的结果,并且我的程序严重依赖于随机数

如何用Fortran编写并行安全的随机数生成器


或者在哪里可以找到它?

自Fortran 2018以来,可以初始化调用映像的伪随机数生成器,以便伪随机数序列与执行类似语句的其他映像的伪随机数序列不同,并且在后续执行程序时也会不同

CALL RANDOM_INIT (REPEATABLE=.FALSE., IMAGE_DISTINCT=.TRUE.) 

中提供更多信息,而不是进行一些复杂的编码(你还不知道怎么做),首先说服自己必须采取这种方法。不要立即拒绝使用顺序PRNG生成所需的所有随机数并将它们放在某个位置(可能在共享内存阵列中)的方法。您的单独进程/线程可以读取它们自己的块。只有在对其进行编程并确定它是性能瓶颈后,才能拒绝它。@HighPerformanceMark如何告诉编译器将随机数数组分成若干块,然后给每个线程分配一个?这里缺少很多信息。什么编译器和操作系统?你是如何播种PRNG的?你确定你观察到的不可再现结果不是代码问题的表现吗?如果你正在编程共享内存,你会让主线程填充一个
n*10^m
随机数数组,其中,
n
是您正在使用的线程数,
m
是一个适合您计算的值,然后随着计算的进行,
n
每个线程都从其自己的共享数组块中读取。如果您使用的是gfortran,则手册会告诉您如何对多个线程使用随机数:。也可以看到,虽然是真的,但我认为与OpenMP这样的线程模型相比,多映像程序可能远远超出了提问者的经验水平。