首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MPI -抑制来自某些处理器的输出

MPI -抑制来自某些处理器的输出
EN

Stack Overflow用户
提问于 2013-12-13 10:18:44
回答 1查看 987关注 0票数 4

是否有一种方法使MPI只打印进程的一个(或一个子集)的输出?我知道如何在代码级别上这样做,但是我想知道在可执行文件已经编译之后是否有什么方法来指定它。我正在考虑像下面命令中的一个窗口那样获得输出

代码语言:javascript
运行
复制
mpirun -np [#processes]  xterm -e [path to executable]

只是不使用xterm。

我知道我可以使用- tag -output选项标记输出,然后手动过滤它,但是这有点乏味。由于MPI知道输出的确切来源,没有更简单的方法来实现这个目标吗?

EN

Stack Overflow用户

回答已采纳

发布于 2013-12-13 14:39:44

你可以写一个包装脚本。由于Open使MPI_COMM_WORLD中的进程级别在名为OMPI_COMM_WORLD_RANK的环境变量中可用,所以很容易执行以下操作:

代码语言:javascript
运行
复制
#!/bin/bash

UNMUTE=$1
shift 1

if [ "$OMPI_COMM_WORLD_RANK" == "$UNMUTE" ]; then
  exec $*
else
  exec $* >/dev/null 2>&1
fi

将其保存到unmute.sh并执行如下所示:

代码语言:javascript
运行
复制
$ mpiexec -n #procs unmute.sh #rank executable [params]

该脚本将所有级别的标准输出和错误流重定向到/dev/null,指定的级别除外。您可以使比较逻辑更加详细,例如,比较范围或等级列表。

下面是上面的脚本的示例:

代码语言:javascript
运行
复制
$ mpiexec -n 6 printenv | grep COMM_WORLD_RANK
OMPI_COMM_WORLD_RANK=0
OMPI_COMM_WORLD_RANK=1
OMPI_COMM_WORLD_RANK=2
OMPI_COMM_WORLD_RANK=3
OMPI_COMM_WORLD_RANK=4
OMPI_COMM_WORLD_RANK=5
$ mpiexec -n 6 unmute.sh 3 printenv | grep COMM_WORLD_RANK
OMPI_COMM_WORLD_RANK=3
票数 7
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20563988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档