运行python串行并行混合?
我是新的mpi4py包。我正在使用这个命令运行我的代码。 mpirun-np4pythontest.py我的任务是打印“helloworld”4次,但按照程序中给定的顺序“只打印一次”。我应该如何在代码中指定,以便下一个命令应该等待上一个命令的完成运行python串行并行混合?,python,mpi,Python,Mpi,我是新的mpi4py包。我正在使用这个命令运行我的代码。 mpirun-np4pythontest.py我的任务是打印“helloworld”4次,但按照程序中给定的顺序“只打印一次”。我应该如何在代码中指定,以便下一个命令应该等待上一个命令的完成 from mpi4py import MPI import sys size = MPI.COMM_WORLD.Get_size() rank = MPI.COMM_WORLD.Get_rank() name = MPI.Get_processor
from mpi4py import MPI
import sys
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
if rank==1:
print 'do it only once',rank
sys.stdout.write(
"Hello, World! I am process %d of %d on %s.\n"
% (rank, size, name))
#MPI.Finalize()
if rank==2:
print 'do it only once',rank
我的答案是印刷
Hello, World! I am process 2 of 4 on sas32.
do it only once 2
Hello, World! I am process 3 of 4 on sas32.
Hello, World! I am process 0 of 4 on sas32.
do it only once 1
Hello, World! I am process 1 of 4 on sas32.
但我想知道我的答案
do it only once 1
Hello, World! I am process 2 of 4 on sas32.
Hello, World! I am process 3 of 4 on sas32.
Hello, World! I am process 0 of 4 on sas32.
Hello, World! I am process 1 of 4 on sas32.
do it only once 2
您需要使用来同步进程:
from mpi4py import MPI
import sys
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
if rank==1:
print('do it only once %d'%rank)
MPI.COMM_WORLD.Barrier()
print("Hello, World! I am process %d of %d on %s."% (rank, size, name))
MPI.COMM_WORLD.Barrier()
if rank==2:
print('do it only once %d'%rank)
输出:
$ mpiexec -n 5 python mpibarrier.py
do it only once 1
Hello, World! I am process 0 of 5 on abc.
Hello, World! I am process 2 of 5 on abc.
Hello, World! I am process 3 of 5 on abc.
Hello, World! I am process 4 of 5 on abc.
Hello, World! I am process 1 of 5 on abc.
do it only once 2
将终止您的mpi会话;完成后无法调用任何内容。您需要使用以同步进程:
from mpi4py import MPI
import sys
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
if rank==1:
print('do it only once %d'%rank)
MPI.COMM_WORLD.Barrier()
print("Hello, World! I am process %d of %d on %s."% (rank, size, name))
MPI.COMM_WORLD.Barrier()
if rank==2:
print('do it only once %d'%rank)
输出:
$ mpiexec -n 5 python mpibarrier.py
do it only once 1
Hello, World! I am process 0 of 5 on abc.
Hello, World! I am process 2 of 5 on abc.
Hello, World! I am process 3 of 5 on abc.
Hello, World! I am process 4 of 5 on abc.
Hello, World! I am process 1 of 5 on abc.
do it only once 2
将终止您的mpi会话;完成后不能调用任何内容。只能从一个列组打印。添加
if
语句是一个简单的练习,因为您已经有了获取排名的代码。我想在不同的时间间隔使用MPI.Finalize()命令,以便下一个命令应该等待完成上一个命令。但是,当我不止一次使用MPI.Finalize()时,就会出现这个错误。调用MPI_Finalize()后调用了MPI_Finalize()函数。您应该只从一个列组打印。添加if
语句是一个简单的练习,因为您已经有了获取排名的代码。我想在不同的时间间隔使用MPI.Finalize()命令,以便下一个命令应该等待完成上一个命令。但是,当我不止一次使用MPI.Finalize()时,就会出现这个错误。调用MPI_Finalize后调用了MPI_Finalize()函数。