我正在使用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来实现“奇偶校验”排序。我做了实现,但是当我将其值随机分配给每个进程时,会将相同的数字随机分配给所有进程。这是每个代码的代码...
此任务并不简单。
这是因为您的种子变化不足,并且随机性取决于您的种子。
嘿,有人可以告诉我与fortran完全相同的东西吗? srand(time(null)+ my_rank)适用于c ++。我现在正在研究fortran,但正在努力。感谢帮助