我試圖在一臺計算機上輸入一個數字,然後將它廣播到使用MPI的所有其他計算機上。MPI_Bcasts掛在slave上
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main (int argc, char** argv)
{
int myid, numprocs, processor_name_length;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init (0, 0);
MPI_Comm_rank (MPI_COMM_WORLD, &myid);
MPI_Comm_size (MPI_COMM_WORLD, &numprocs);
MPI_Get_processor_name (processor_name, &processor_name_length);
int number = 0;
if (myid == 0) {
printf ("Input number: ");
scanf ("%d", &number);
}
MPI_Bcast(&number, 1, MPI_INT, 0, MPI_COMM_WORLD);
printf ("Hello from process %d of %d. Number: %d [%s]\n", myid, numprocs, number, processor_name);
MPI_Finalize();
return 0;
}
當我編譯並運行它:
mpicc -o bcast bcast.c
mpiexec -hosts umaster,uslavea -n 2 ./bcast
這promts我要上位機上輸入,那麼它後,我輸入的號碼將打印的printf此消息,然後將其掛..
輸出:
Input number: 10
Hello from process 0 of 2. Number: 10 [umaster]
應該有消息:
Hello from process 1 of 2. Number: 10 [uslavea]
編輯:
如果我用這個命令運行:
mpiexec -hosts master -n 4 ./bcast
一切正常,我也有,我用MPI_Send(...)
和我得到拒絕連接錯誤另一個例子,但是,如果我跑在單機上的例子一切正常。我假設我的配置/集羣不好。下面的例子能正常工作:
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main (int argc, char** argv)
{
int myid, numprocs;
MPI_Init (0, 0);
MPI_Comm_rank (MPI_COMM_WORLD, &myid);
MPI_Comm_size (MPI_COMM_WORLD, &numprocs);
printf ("Hello from process %d of %d.\n", myid, numprocs);
MPI_Finalize();
return 0;
}
與運行它:
mpiexec -hosts master,uslavea,uslaveb,uslavec -n 4 ./hello
我已經創建了4個虛擬機,生成的DSA密鑰,我可以從每一個到每一個使用ssh登錄時不要求密碼。 (來自主人:例如ssh mpiuser @ uslavea)。在所有機器上,用戶都是mpiuser,每臺機器的密碼都相同。
可能是什麼問題?我重複運行只有與主人-n X
工作正常。
我不確定,所以這只是一條評論。我認爲奴隸掛在'MPI_Get_processor_name(...)',可能是因爲'processor_name_length'從未設置。 – Soana
我已經刪除了,同樣的事情發生......如果我刪除'''MPI_Bcast(...)'''然後程序退出罰款,否則它掛起。 – clzola
它看起來非常好,應該工作。也許機器不能看到對方/不能溝通?其他溝通方法的工作? – Soana