Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行python串行并行混合?_Python_Mpi - Fatal编程技术网

运行python串行并行混合?

运行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

我是新的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_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()函数。