我正在尝试使用以下tutorial使用ubuntu 14.04和beagleboard xm board制作mpi群集。问题是我的客户端是beagleboard-xm,它有一个32位的armv7处理器。我使用mpic ++ -o hello_world.c创建了一个可执行文件,其内容是:
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d"
" out of %d processors\n",
processor_name, world_rank, world_size);
// Finalize the MPI environment.
MPI_Finalize();
}
我可以在ubuntu 14.04(intel x86_64)和beagleboard-xm上编译它。但是,当我尝试并行运行时,例如使用&#34; mpirun -host Server,board1 ./mpi_hello_world
&#34;我得到
bash: orted: command not found
--------------------------------------------------------------------------
A daemon (pid 8349) died unexpectedly with status 127 while attempting
to launch so we are aborting.
我相信这是因为无法从我的服务器启动32位可执行文件。如果我在电路板上运行&#34; ./ mpi_hello_world,我会得到&#34; -su: ./mpi_hello_world: cannot execute binary file: Exec format error
&#34; 。如果我在电路板上编译并尝试在服务器上运行它,则会发生相反的情况。所以我的问题是我如何才能拥有一个可以同时在我的服务器和主板上运行的可执行文件?
答案 0 :(得分:2)
Open MPI抱怨它在远程主机的路径中找不到orted
。您应该修改Beagle板上shell配置文件脚本中的PATH
变量,以包含bin
目录的路径和LD_LIBRARY_PATH
变量,以包含lib
的路径Open MPI安装目录。或者使用--prefix
选项提供远程安装的路径:
mpiexec --prefix /path/to/openmpi/on/beagle ...
前缀在远程系统上设置PATH
和LD_LIBRARY_PATH
。请注意,库路径的最后一个组件是从本地安装中复制的,例如如果Open MPI的库在/path/to/openmpi/lib64
中(因为您的主机是64位),那么它会将远程主机上的LD_LIBRARY_PATH
设置为/path/to/openmpi/on/beagle/lib64
,这可能不正确。仅当Open MPI安装在默认系统库位置时,这通常是关注的,例如,从包中安装时,仅在某些Linux发行版上安装,特别是那些基于RedHat的发行版。 Ubuntu遵循Debian约定并将64位库放在/usr/lib
中,因此您仍然可以安全地使用--prefix
机制。
由于您希望在具有不同CPU类型的主机上运行程序,因此必须在--enable-heterogeneous
的两个系统上重建Open MPI,以便支持异构计算。确保您没有使用--enable-orterun-prefix-by-default
构建,因为它需要在主机和Beagle板上的完全相同的位置安装Open MPI。
如果不共享公共文件系统,则不需要在两个平台上为可执行文件指定不同的名称,但这样做有助于防止混淆。
总结:
mpiexec --prefix /path/to/openmpi/on/beagle \
-H localhost -n 1 ./binary_x64 : \
-H bealgexm -n 1 ./binary_arm
这仍然假定主机上的当前目录,例如Beagle板上也存在/home/user/mpitest
。如果没有,请在第二个应用程序上下文中提供ARM可执行文件的完整路径。
注意: Open MPI中的异构支持为generally broken。只有非常简单的代码才有效。