我有一个基本程序,该程序从一个线程到另一个线程发送一条消息,并每次替换一个字符。我的问题是,每个线程中生成的随机数始终相同。这是我的代码:
if (me+1 == npe) then
a = 0
else
a = me + 1
end if
if (me == 0) then
b = npe-1
else
b = me-1
end if
if (me == 0) then
call MPI_Send(msg, len(msg), MPI_CHARACTER, a, tag, comm, ierr)
else
call MPI_Recv(msg, len(msg), MPI_CHARACTER, b, tag, comm, stat, ierr)
call random_number(u)
j = FLOOR(14*u)
msg(j:j) = "?"
call MPI_Send(msg, len(msg), MPI_CHARACTER, a, tag, comm, ierr)
end if
if (me == 0) then
call MPI_Recv(msg, len(msg), MPI_CHARACTER, b, tag, comm, stat, ierr)
end if
我=线程数,npe =线程总数
除了随机生成的数字以外,所有其他方法都有效。我尝试使用random_seed(me)调用,但是它不起作用。
您没有正确使用RANDOM_SEED()
。使用单个(标量)伪参数,实际上是在查询RANDOM_SEED()
,其中>
指定与PUT和GET参数一起使用的数组的最小大小。
正确的用法是
SIZE
其中种子是一个数组(我的机器上的大小为12 /
call random_seed(put=seed)
)。
请参见gfortran
,您可以根据自己的需要进行调整,例如,为每个过程使用不同的种子。您可以,例如根据当前等级在the documentation中选择一个不同的素数。 不要与等级相乘
我是否= 1,5Rho = rhonot + rand()* Epsilon做完在这里,我有20个处理器和100个样本。因此,每个处理器获得5个样本。有人可以用rand帮助我,让我在20个处理器中获得不同的随机数。我通过每个处理器获得相同的5个随机数。尝试了很多,周围没有具体答案。