Slime\Emacs comint зависает при запуске процесса mpi

У меня есть простая программа mpi для демонстрации моей проблемы:

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

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

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &csize);

    printf("Hello from rank[%d/%d]\n", rank, csize);

    MPI_Finalize();
}

После компиляции я могу успешно запустить исполняемый файл, используя mpirun из sbcl repl:

* (uiop:run-program '("mpirun" "-np" "10" "./hello_world") :output :string)

"Hello from rank[7/10]
Hello from rank[9/10]
Hello from rank[5/10]
Hello from rank[8/10]
Hello from rank[0/10]
Hello from rank[1/10]
Hello from rank[2/10]
Hello from rank[3/10]
Hello from rank[4/10]
Hello from rank[6/10]
"
NIL
0

Однако, когда я запускаю то же самое из слизи, реплика слизи просто зависает. Если я запускаю исполняемый файл напрямую, а не через пусковую установку mpirun, то все работает нормально:

CL-USER> (uiop:run-program '("./hello_world")
               :output :string)
"Hello from rank[0/1]
"
NIL
0

Я использую sbcl-1.4.5 и Slime 2.20 на рабочей станции Linux. Есть ли у кого-нибудь решение этой проблемы или отправная точка, где искать?

ОБНОВИТЬ:

Проблема связана с режимом emacs comint, на котором основан Slime. Я наблюдаю такое же зависание, если я запускаю sbcl через make-comint-in-buffer, а затем использую uiop:run-program.

ОБНОВЛЕНИЕ2:

Почитав немного о режиме comint, я смог зафиксировать некоторый вывод из процесса зависания. Этот код emacs lisp:

(make-comint "foo" "mpirun" nil "-np" "1" "/home/ptb/programming/c/hello_world")

выдает следующую ошибку в зависшем процессе:

[warn] Epoll MOD(1) on fd 14 failed.  Old events were 6; read change was 0 (none); write change was 2 (del): Bad file descriptor
[warn] Epoll MOD(4) on fd 14 failed.  Old events were 6; read change was 2 (del); write change was 0 (none): Bad file descriptor

Любые идеи относительно того, что это означает?


person ptb    schedule 08.05.2018    source источник
comment
Я предполагаю, что это проблема с перенаправлением stdin/stdout в openmpi или libevent (такие проблемы были в прошлом, например, bugzilla.redhat.com/show_bug.cgi?id=1235044). Какую версию из них вы используете?   -  person Svante    schedule 09.05.2018
comment
@Сванте Гений! Я создал более новую версию openmpi (3.0.0), а не ту, что поставляется Fedora. Я вернулся к версии rpm, и теперь все работает нормально. Не стесняйтесь оставлять свой комментарий в качестве ответа.   -  person ptb    schedule 09.05.2018


Ответы (1)


Я предполагаю, что это проблема с перенаправлением stdin/stdout в openmpi или libevent (такие проблемы были в прошлом, например, bugzilla.redhat.com/show_bug.cgi?id=1235044). Какую версию из них вы используете?

person Svante    schedule 09.05.2018