你可以編寫一個包裝腳本。由於開放MPI使得MPI_COMM_WORLD
過程軍銜稱爲OMPI_COMM_WORLD_RANK
環境變量可用,這是很容易做到的事情,如:
#!/bin/bash
UNMUTE=$1
shift 1
if [ "$OMPI_COMM_WORLD_RANK" == "$UNMUTE" ]; then
exec $*
else
exec $* >/dev/null 2>&1
fi
保存這unmute.sh
並執行它想:
$ mpiexec -n #procs unmute.sh #rank executable [params]
的腳本將標準輸出和錯誤流重定向到/dev/null
,除了指定的所有等級外。您可以使比較邏輯更精細,例如與一系列或一系列等級進行比較。
這裏是上面的腳本在行動樣本:
$ 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
有沒有在MPI標準(其中任何一個)來幫助你。儘管(a)您沒有告訴我們您正在使用什麼實現,並且(b)我會驚奇地發現任何實現都具有此功能。 –
這是不幸的 - 要求這是一件很奇怪的事情嗎?我正在使用OpenMPI 1.4.3。無論如何,謝謝你的評論;至少我知道我最有可能停止尋找它。 – Johanna