MPI中每个进程的随机数

问题描述 投票:6回答:3

我正在使用MPICH2来实现“奇偶校验”排序。我做了实现,但是当我随机分配给每个过程时,他的价值,相同的数字将随机分配给所有进程。

这里是每个过程的代码,每个过程随机化其值。

int main(int argc,char *argv[])
{
    int  nameLen, numProcs, myID;
    char processorName[MPI_MAX_PROCESSOR_NAME];
    int myValue;

    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD,&myID);
    MPI_Comm_size(MPI_COMM_WORLD,&numProcs);    
    MPI_Get_processor_name(processorName,&nameLen);
    MPI_Status status;

    srand((unsigned)time(NULL));
    myValue = rand()%30+1; 

    cout << "myID: " << myID << " value: " << myValue<<endl;
    MPI_Finalize();

    return 0;
 }

为什么每个进程都获得相同的值?

编辑:感谢您的回答:)

我改变了线路

 srand((unsigned)time(NULL));

 srand((unsigned)time(NULL)+myID*numProcs + nameLen);

并且它给每个过程一个不同的值:)

我正在使用MPICH2来实现“奇偶校验”排序。我做了实现,但是当我将其值随机分配给每个进程时,会将相同的数字随机分配给所有进程。这是每个代码的代码...

c++ random mpi mpich
3个回答
6
投票

此任务并不简单。


2
投票

这是因为您的种子变化不足,并且随机性取决于您的种子。


0
投票

嘿,有人可以告诉我与fortran完全相同的东西吗? srand(time(null)+ my_rank)适用于c ++。我现在正在研究fortran,但正在努力。感谢帮助

© www.soinside.com 2019 - 2024. All rights reserved.