Python 使用mpi4py并行化计算集群上的“for”循环
我以前没有使用过分布式计算,但我正在尝试将mpi4py集成到一个程序中,以便在计算集群上并行化for循环 这是我想做的一个伪代码: 对于目录中的文件: 初始化一个类 运行类方法 综合结果Python 使用mpi4py并行化计算集群上的“for”循环,python,parallel-processing,cluster-computing,mpi4py,Python,Parallel Processing,Cluster Computing,Mpi4py,我以前没有使用过分布式计算,但我正在尝试将mpi4py集成到一个程序中,以便在计算集群上并行化for循环 这是我想做的一个伪代码: 对于目录中的文件: 初始化一个类 运行类方法 综合结果 我已经找遍了堆栈溢出,但找不到任何解决方案。是否有任何方法可以简单地使用mpi4py实现这一点,或者是否有其他工具可以通过简单的安装和设置实现这一点?为了使用mpi4py实现for循环的并行性,请查看下面的代码示例。 这只是一个for循环来添加一些数字。for循环将在每个节点中执行。每个节点都将获得不同的数据
我已经找遍了堆栈溢出,但找不到任何解决方案。是否有任何方法可以简单地使用mpi4py实现这一点,或者是否有其他工具可以通过简单的安装和设置实现这一点?为了使用mpi4py实现for循环的并行性,请查看下面的代码示例。 这只是一个for循环来添加一些数字。for循环将在每个节点中执行。每个节点都将获得不同的数据块来处理for循环中的范围。 最后,秩为零的节点将添加所有节点的结果
#!/usr/bin/python
import numpy
from mpi4py import MPI
import time
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
a = 1
b = 1000000
perrank = b//size
summ = numpy.zeros(1)
comm.Barrier()
start_time = time.time()
temp = 0
for i in range(a + rank*perrank, a + (rank+1)*perrank):
temp = temp + i
summ[0] = temp
if rank == 0:
total = numpy.zeros(1)
else:
total = None
comm.Barrier()
#collect the partial results and add to the total sum
comm.Reduce(summ, total, op=MPI.SUM, root=0)
stop_time = time.time()
if rank == 0:
#add the rest numbers to 1 000 000
for i in range(a + (size)*perrank, b+1):
total[0] = total[0] + i
print ("The sum of numbers from 1 to 1 000 000: ", int(total[0]))
print ("time spent with ", size, " threads in milliseconds")
print ("-----", int((time.time()-start_time)*1000), "-----")
为了执行上面的代码,您应该像这样运行它:
$qsub-qexp-l select=4:ncpus=16:mpiprocs=16:ompthreads=1-I所罗门:ncpus=24:mpiprocs=24
$ml Python
$ml OpenMPI
$mpiexec-bycore-绑定到核心python hello\u world.py
在本例中,我们在4个节点上运行启用MPI4Py的代码,每个节点16个核心,总共64个进程,每个python进程绑定到不同的核心
可能对您有所帮助的来源:
如何理解以毫秒为单位使用线程?我认为它应该被称为处理器或任务。