首先,我在互联网上搜索但找不到答案。也许原因是我是MPI的新手。这是一个问题:
首先,我希望主处理器读取txt文件。然后拿出足够的信息。但在此期间,我希望其他人等待阅读过程。
这是我的代码:
int processorID;
int numberOfProcessors;
int main(int argc, char* argv[]){
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD ,&numberOfProcessors);
MPI_Comm_rank(MPI_COMM_WORLD ,&processorID);
int a, b, c;
if(MASTER){
FILE *myFile;
myFile=fopen("input.txt", "r");
fscanf(myFile, "%d", &a);
fscanf(myFile, "%d", &b);
fscanf(myFile, "%d", &c);
}
MPI_Barrier(MPI_COMM_WORLD);
if(SLAVE){
printf("%d\n" ,a);
printf("%d\n" ,processorID);
}
MPI_Finalize();
return 0;
}
我不应该使用MPI_Barrier吗?例如,我有5个处理器,0是主处理器。感谢MPI_Barrier,其他1-2-3-4在完成阅读之前不必等待0?但这不起作用。
答案 0 :(得分:0)
其他进程无法查看a
的更新值,因为它是进程本地的。使用MPI_Bcast
将其发送给其他人。这样所有进程都在MPI_Bcast
等待。
我修改了你的代码,如下所示;
int processorID;
int numberOfProcessors;
int main(int argc, char* argv[]){
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD ,&numberOfProcessors);
MPI_Comm_rank(MPI_COMM_WORLD ,&processorID);
int a, b, c;
if(!processorID){ // master
FILE *myFile;
myFile=fopen("input.txt", "r");
fscanf(myFile, "%d", &a);
fscanf(myFile, "%d", &b);
fscanf(myFile, "%d", &c);
MPI_Bcast(&a, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
//MPI_Barrier(MPI_COMM_WORLD);
else {
//if(SLAVE){
// blocks at Bcast waiting for a. Prints value read by MASTER
MPI_Bcast(&a, 1, MPI_INT, 0, MPI_COMM_WORLD);
printf("%d\n" ,a);
printf("%d\n" ,processorID);
}
MPI_Finalize();
return 0;
}