2016-04-12 22 views
2

私は、次のようにtutorialを使用してmpiクラスタを作成しようとしています。ubuntu 14.04とbeagleboard xm boardを使用しています。問題は、私のクライアントが32ビットのarmv7プロセッサを搭載したbeagleboard-xmだということです。私は両方のUbuntu 14.04(インテルx86_64版)とのBeagleBoard-XMでこれをコンパイルすることができます32ビットと64ビットプロセッサ上で混在mpi実行ファイルを実行する

#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(); 
} 

:私は、そのMPIC++ -o hello_world.c内容を使用して実行ファイルを作成しました。私は「mpirun -host Server,board1 ./mpi_hello_world」を使用して、たとえば使用して並列で実行しようとすると、しかし、私は私が32ビットexecutiableは私のサーバーから起動することができないためであると考えてい

bash: orted: command not found 
-------------------------------------------------------------------------- 
A daemon (pid 8349) died unexpectedly with status 127 while attempting 
to launch so we are aborting. 

を取得します。もし私が "./mpi_hello_worldを実行すると、ボード自体に" -su: ./mpi_hello_world: cannot execute binary file: Exec format error "というメッセージが表示されます。ボード上でコンパイルしてサーバ上で実行しようとすると、逆のことが起こります。私のサーバーとボードの両方を同時に使用しているのですか?

+0

2つの実行可能ファイルをコンパイルしようとしましたか?1つはx86用、もう1つはARM用ですか?それで、あなたは 'mpirun -host Server 'のようなもので走ってみることができます。/ mpi_hello_world_x86:-host board1。/ mpi_hello_world_arm' ...ちょっと考えました。 – Gilles

+0

@Giles: "mpirun -np 1 -host Server ./mpi_hello_world_x86:-np 1 -host board1 ./mpi_hello_world_xarm"を実行しようとしましたが、まだbash:orted:コマンドが見つかりませんでした。 ----------- -------------------------------------------------- ------------- を起動しようとするとデーモン(pid 8349)が予期せずステータス127で亡くなり、中断しました。実行ファイルは、マシン上で個別に正常に実行されます。 – srai

+0

2つの異なる問題があります:1 /私の前のコメントが解決しようとしたバイナリと2 /あなたのMPI環境の設定との間の非互換性。 MPIコードを実行しようとすると、あとで調整する必要があります。 'mpirun -host Server、board1 hostname'のようなものが両方のマシンの名前を返さない限り、あなたは動作しないMPI環境を持っています。 – Gilles

答えて

2

オープンMPIは、リモートホストのパスにortedが見つからないと訴えています。パスを含めるようにBeagleボードのシェルプロファイルスクリプトのPATH変数を変更する必要がありますbinディレクトリとLD_LIBRARY_PATH変数に、Open MPIインストールのlibディレクトリへのパスを含めるか、--prefixオプションを使用してリモートインストールへのパスを指定します。

mpiexec --prefix /path/to/openmpi/on/beagle ... 

接頭辞は、リモートシステム上でPATHLD_LIBRARY_PATHの両方を設定します。ライブラリパスの最後のコンポーネントはローカルインストールからコピーされることに注意してください。 Open MPIのライブラリが/path/to/openmpi/lib64(ホストが64ビットであるため)にすると、リモートホストのLD_LIBRARY_PATH/path/to/openmpi/on/beagle/lib64に設定されますが、これはおそらく正しくありません。これは通常、Open MPIがデフォルトのシステムライブラリの場所にインストールされている場合にのみ関係します。パッケージからインストールされた場合、およびRedHatに基づくLinuxディストリビューションの場合にのみ有効です。 UbuntuはDebianの慣習に従い、/usr/libに64ビットライブラリを置くので、--prefixメカニズムを安全に利用できるはずです。

異なるCPUタイプのホストでプログラムを実行したいので、ヘテロジニアスコンピューティングのサポートを有効にするには、両方のシステムでOpen MPIを--enable-heterogeneousに再構築する必要があります。 --enable-orterun-prefix-by-defaultでビルドしていないことを確認してください。Open MPIがホストとBeagleボードの同じ場所にインストールされている必要があります。

実行ファイルに共通のファイルシステムを共有していない場合は、両方のプラットフォームで異なる名前を付ける必要はありませんが、混乱を防ぐのに役立ちます。

mpiexec --prefix /path/to/openmpi/on/beagle \ 
     -H localhost -n 1 ./binary_x64 : \ 
     -H bealgexm -n 1 ./binary_arm 

をこれはまだ、例えば、ホスト上の現在のディレクトリことを前提としています要約すると

/home/user/mpitestもBeagleボードに存在します。そうでない場合は、2番目のアプリケーションコンテキストでARM実行可能ファイルへのフルパスを指定します。

注: Open MPIの異種サポートは、generally brokenです。非常に簡単なコードだけが動作する可能性があります。

+0

lliev:詳細な説明をありがとう。私は現在、オープンmpiの代わりにmpichを使用しています。あなたはそれをアンインストールして代わりにオープンmpiをインストールし、あなたのガイドに従うか、PATHとLD_LIBRARY_PATHを設定しようと勧めますか? mpich2の場合、私は両方のマシンで別々のユーザーmpiuserを作成しました。 – srai

+0

@skrai、あなたは明らかにMPICHの 'mpirun'を使用していません。なぜなら、' orted'はOpen MPIのORTEの一部であるからです。おそらく、Open MPIとMPICHの両方がホストにインストールされていることを意味します。これはしばしば問題につながります。 Open MPIを使用していない場合はアンインストールしてください。 –

+0

lliev:ubuntu 14.04(x86_64)でmpiの2ノードのクラスタを実行できるようになりましたが、アームの実行ファイルは失敗します。あなたは私のアプリケーションを2つに分割することをお勧めしますか? 1つはアーム用、もう1つはx86_64用ですか?ボードはサーバーと対話する必要があります。 – srai

関連する問題