我正在研究与 Epiphany 处理器 ( http://www.parallella.org/ ) 一起使用的代码,并且要运行 Epiphany 代码,我需要在主机端程序上具有 sudo 权限。sudo 无处可逃!
现在我需要在多个节点上运行此代码,为了做到这一点,我正在使用 mpi,但 mpi 无法与 sudo 一起正常运行
#sudo mpirun -n 12 --hostfile hosts -x LD_LIBRARY_PATH=${ELIBS} -x EPIPHANY_HDF=${EHDF} ./hello-mpi.elf
即使是进行节点通信的简单代码也不起作用。如果我使用 sudo,排名为 0。线程之间的通信可以工作,但不能跨节点通信。这很重要,因为我想在卡片之间正确分配工作负载。
这是简单的代码
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
printf("Hello World from MPI Process %d on machine %s\n", rank, processor_name);
MPI_Finalize();
}
此代码应该在节点之间以不同的方式吐出排名号,但它不适用于 sudo
对此的任何帮助都会很棒
这是在不使用 sudo 的情况下运行上述代码的输出。
mpirun -n 3 --hostfile $MPI_HOSTS ./mpitest
输出:
Hello world from processor work1, rank 1 out of 3 processors
Hello world from processor command, rank 0 out of 3 processors
Hello world from processor work2, rank 2 out of 3 processors
这正如预期的那样。
这是使用 sudo 运行上述代码的输出。
sudo mpirun -n 3 --hostfile $MPI_HOSTS ./mpitest
输出:
Hello world from processor command, rank 0 out of 1 processors
Hello world from processor work1, rank 0 out of 1 processors
Hello world from processor work2, rank 0 out of 1 processors
这不是。
编辑:-
我认为@Hristo Iliev得到了正确的答案,但我无法对此进行测试