【发布时间】:2019-03-04 10:13:03
【问题描述】:
我正在编写一个 MPI 程序,其中我允许每个进程在我想要某个进程的经过的时间内生成它的自己的随机数具有由某些其他进程生成的相同随机数。例如,一个简单的 printf 语句:
Process 1 has generated the number 19
Process 2 has generated the number 8
Process 3 has generated the number 19
.
.
因此,进程 1 和 3 生成了相同的随机数。此外,为了确保我可以获得相同的随机数生成,我将限制为仅整数值,而不是双精度或浮点数。
我写过:
#include <stdio.h>
#include "mpi.h"
#include <stdlib.h>
#include <time.h>
#define numprocess 20
int main(int argc, char *argv[])
{
int rank,size;
int rand_value;
int lower,upper;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
upper = 20;
lower = 0;
rand_value = rand()%(upper-lower);
printf("Process %d generated a random number of %d\n",rank,rand_value);
MPI_Finalize();
return 0;
}
但我得到的输出是:
Process 0 generated a random number of 7
Process 2 generated a random number of 7
Process 8 generated a random number of 7
Process 1 generated a random number of 7
Process 3 generated a random number of 7
Process 4 generated a random number of 7
Process 5 generated a random number of 7
Process 6 generated a random number of 7
Process 7 generated a random number of 7
Process 9 generated a random number of 7
Process 11 generated a random number of 7
Process 10 generated a random number of 7
Process 16 generated a random number of 7
Process 17 generated a random number of 7
Process 19 generated a random number of 7
Process 13 generated a random number of 7
Process 12 generated a random number of 7
Process 18 generated a random number of 7
Process 15 generated a random number of 7
Process 14 generated a random number of 7
【问题讨论】:
-
rand()产生一个伪随机数。考虑将std::random_device用于真正的随机数。 -
什么是
value,它在哪里初始化? -
我不知道 MPI 是什么意思,但你不是忘了打电话给srand() 吗?
-
如果您在 Un*x 上,请尝试阅读
/dev/urandom。 -
使用 MPI 等级来播种 RNG。
rank%2看起来很合适。