当我尝试运行mpi示例时,我得到Permission被拒绝。这是我试图运行的代码。
#include <stdio.h>
#include <mpi.h>
int main (int argc,char *argv[])
{
int rank, size;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */
printf( "Hello world from process %d of %d\n", rank, size );
MPI_Finalize();
return 0;
}
我在主VM上的共享文件夹中编译了它。我还生成了ssh密钥并将其复制到所有从属VM。我有一个“hosts”文件,其中包含所有VM的所有IP地址,包括master vm。
我使用此命令运行代码
`mpiexec -f hosts -n 4 hello_world
但是我得到了
===================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= PID 2961 RUNNING AT 10.0.0.41
= EXIT CODE: 255
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
Permission denied, please try again.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
Permission denied, please try again.
Permission denied (publickey,password).
顺便说一下,10.0.0.41是主虚拟机。
提前致谢
答案 0 :(得分:-1)
我明白了。 我使用的是ubuntu,默认情况下它不允许通过ssh进行root访问。所以我需要在所有虚拟机中允许root ssh访问,然后生成一个ssh密钥并在每个通信虚拟机之间复制它。
更多细节,以防有人遇到同样的问题。
我在所有虚拟机中执行了以下步骤
然后选择一个传球词
编辑“PermitRootLogin without-password”&gt;&gt;&gt;&gt;使它“PermitRootLogin yes”
现在您可以使用ssh-keygen
生成一个ssh密钥并使用ssh-copy-id -i root @ remote
复制它对群集中的每两台通信机器执行相同的操作。
我想提到的另一件事是,我在执行mpi代码时遇到了错误。
我使用'mpiexec -f hosts -n 4 hello_world'我应该在可执行文件之前放置./。所以正确的命令应该是 'mpiexec -f hosts -n 4 ./hello_world'
此致