2

申し訳ありませんが、ばかげた間違いを犯していると思いますが、うまくいきませんでした。

単純なmpihelloworldをコンパイルしています:

#include <stdio.h>
#include <mpi.h>

int main (argc, argv)
     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;
}

と:

> mpicc -o hello_world_c hello_world.c
> mpirun -np 4 hello_world_c

しかし、戻ります:

Hello world from process 0 of 1
Hello world from process 0 of 1
Hello world from process 0 of 1
Hello world from process 0 of 1

しかし、私のコンピューターは4コアのコアi7です。そして、すべてが大丈夫のようです、すなわち。cat / proc / cpuinfoは、4つのプロセッサを示しています

何が起こっていますか???前もって感謝します!!!!

4

4 に答える 4

5

コードに問題はありません。発生する可能性がある唯一の問題は、mpiのインストールにあります。

知らせ:

プロセッサとコアには違いがあります。それは同じことではありません。

于 2012-04-03T10:11:59.907 に答える
1

この場合、「mpich2」パッケージのmpiexecが必要です。

まず、コンピューターにインストールされているすべてのmpiパッケージを削除します。サーバーがUbuntuの場合は、次のコマンドを使用できます。

sudo apt-get purge mpi mpich2 openmpi-common

すべてのパッケージを削除したことを確認するには、このコマンドを試してください

which mpiexec

応答がない場合は、すでにすべてのパッケージを削除しています。

次に、mpich2のパッケージを再インストールします

sudo apt-get install mpich2

コードをコンパイルしてもう一度実行してみてください。この助けを願っています!

于 2014-04-09T08:40:40.113 に答える
0

どうやってコンパイルできるかわかりません:

 int main (argc, argv)
 int argc;
 char *argv[];

に変更されます

 int main (int argc, char *argv[])

もう1つのポイントは、mpiは、コアやプロセッサではなくプロセス間でメッセージを渡すメッセージパッシングインターフェイスであるということです。4コアシステムを使用している場合は、ramが許可する数のプロセスでコードを実行できますが、常に4つのプロセスと他のプロセスしか機能していません。 4つのプロセスのみを使用することが効率的であるように待機する必要があります。

于 2012-04-03T13:04:18.180 に答える
0

インストール

sudo apt-get install libopenmpi-dev openmpi-bin openmpi-doc

次に、コードをコンパイルして実行します

ここに画像の説明を入力してください

于 2017-02-12T19:42:14.080 に答える