我是MPI和C的初学者,我尝试提高自己的能力,但是我有一个问题,无法解决。
我有一个文本文件,其中包含我的名字。我需要做的是MPI中的进程0应该读取此文本文件并将其发送给其他进程。我遵循的方式如下:
if (myid == 0) {
// Read myname.txt file and convert it to a string
char name[100];
ifstream input("myname.txt");
for (int i = 1; i < nprocs; i++){
input >> name;
cout << name;
}
input.close();
// Send name and alphabet strings to all processors by means of broadcasting
MPI_Bcast(&name, 100, MPI_CHAR, 0, MPI_COMM_WORLD);
}
执行此操作时,使用此“名称”缓冲区的其他进程的操作将无法完成,并出现此类错误:
'name' was not declared in this scope.
在生成此“&name”地址时,我有一个错误。您能帮我解决这个问题吗?预先感谢。
答案 0 :(得分:0)
您需要提供一个位置来存储所有级别的数组,并且name
已经是一个指针:
char name[100];
if (myid == 0) {
// Read myname.txt file and convert it to a string
ifstream input("myname.txt");
for (int i = 1; i < nprocs; i++){
input >> name;
cout << name;
}
input.close();
}
// Send name and alphabet strings to all processors by means of broadcasting
MPI_Bcast(name, 100, MPI_CHAR, 0, MPI_COMM_WORLD);
对MPI_Bcast
的呼叫在所有级别上都是相同的,无需将其放在if
内。在等级0上唯一要做的就是读取文件。