2
/* C Example */
#include <mpi.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>

int main (int argc, char* argv[])
{
  int rank, size;
  int buffer_length = MPI_MAX_PROCESSOR_NAME;
  char hostname[buffer_length];

  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 */

  MPI_Get_processor_name(hostname, &buffer_length); /* get hostname */

  printf( "Hello world from process %d running on %s of %d\n", rank, hostname, size );
  MPI_Finalize();
  return 0;
}

上記のプログラムは、小さい番号の ubuntu 12.04 で正常にコンパイルおよび実行されます。プロセスの。しかし、何千ものプロセスで実行しようとすると失敗します。なぜそうなのですか?スケジューラがスレッドをキューに保持し、1 つずつディスパッチできることを期待しています (このコードをシングル コア マシンで実行しています)。

大きい番号に対して次のエラーが発生するのはなぜですか。のプロセスと、この問題を解決する方法

root@ubuntu:/home# mpiexec -n 1000 ./hello
[proxy:0:0@ubuntu] HYDU_create_process (./utils/launch/launch.c:26): pipe error (Too many open files)
[proxy:0:0@ubuntu] launch_procs (./pm/pmiserv/pmip_cb.c:751): create process returned error
[proxy:0:0@ubuntu] HYD_pmcd_pmip_control_cmd_cb (./pm/pmiserv/pmip_cb.c:935): launch_procs returned error
[proxy:0:0@ubuntu] HYDT_dmxu_poll_wait_for_event (./tools/demux/demux_poll.c:77): callback returned error status
[proxy:0:0@ubuntu] main (./pm/pmiserv/pmip.c:226): demux engine error waiting for event
Killed
4

1 に答える 1

3

システムで開いているファイルの制限に達しています。Ubuntu のデフォルトは 1024 です。ulimit コマンドを使用して、セッションの制限を引き上げることができます。

ulimit -n 2048
于 2013-10-27T20:18:25.357 に答える