gpt4 book ai didi

emacs - Slime\Emacs comint 在启动 mpi 进程时挂起

转载 作者:行者123 更新时间:2023-12-02 14:19:21 24 4
gpt4 key购买 nike

我有一个简单的 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

但是,当我从 slime 中运行相同的内容时,slime repl 只是挂起。如果我直接运行可执行文件,而不是通过 mpirun启动器,然后一切运行正常:

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

我在 Linux 工作站上使用 sbcl-1.4.5 和 slime 2.20。有谁能解决这个问题或从哪里开始寻找?

更新:

问题源于emacs comint模式,史莱姆所基于的。如果我启动 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

对于这意味着什么有什么想法吗?

最佳答案

我猜这是 openmpi 或 libevent 中重定向 stdin/stdout 的问题(过去也曾出现过此类问题,例如 bugzilla.redhat.com/show_bug.cgi?id=1235044)。您使用其中的哪个版本?

关于emacs - Slime\Emacs comint 在启动 mpi 进程时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com