openmpi, termios и stdin - PullRequest
       27

openmpi, termios и stdin

0 голосов
/ 07 мая 2018

У меня вопрос относительно openmpi и стандартного дескриптора входного файла (fd) и использование termios. На самом деле стандартный fd используется в программах ompi?

Существует опция mpirun -stdin для стандартного перенаправления ввода на определенный уровень. Я предполагаю, что что-то сделано за сценой.

Например, следующий фрагмент кода завершается с ошибкой tcgetattr для STDIN_FILENO только с mpirun (но работает последовательно).

#include <iostream>
#include <mpi.h>
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <assert.h>
using namespace std;

int main(int argc, char* argv[]) {
  MPI_Status status;
  MPI_Init(&argc, &argv);

  int in = dup( STDIN_FILENO );
  struct termios org_opts, new_opts;
  res = tcgetattr( in, &org_opts);
  assert(res==0);

  MPI_Finalize( );
}    

1 Ответ

0 голосов
/ 08 мая 2018

В Open MPI stdin читается процессом mpirun.

Затем считанные данные перенаправляются в одну задачу MPI (задача 0, если явно не указано иное), и это может включать в себя orted демон (ы).

Нижняя строка, и с точки зрения задачи MPI, которая перенаправлена ​​ stdin, нулевой дескриптор файла равен pipe локальному демону (mpirun или orted) и именно поэтому tcgetattr() и друзья терпят неудачу.

Обратите внимание, что все другие задачи MPI имеют нулевой дескриптор файла, указывающий на /dev/null.

IIRC, SLURM предоставляет опцию srun (например, прямой запуск), в которой stdin является псевдотерминалом.

...