从几个核心上的分布式处理到多个多核心节点上的分布式处理

时间:2019-04-05 18:57:27

标签: python python-multiprocessing slurm condor

背景

在python中,我最近学习了如何通过使用serial_procedure.py包利用笔记本电脑的4个内核来产生模块{{1}来加速模块名称为multiprocessing的串行过程。 }。

问题

现在,我将使用一个具有3个节点的计算机集群,每个节点具有4个核心。如何通过在群集的3 * 4内核上并行化multicore_procedure.py来加快速度?

更具体的请求

鉴于我在编程和软件工程方面的知识非常少,我希望在slurm和condor资源管理软件系统中使用python中的一些显式示例脚本。目标是自动检测3 * 4 = 12个可用内核,并编写统一的代码。

更多信息

下面提供了示例模块multicore_procedure.pyserial_procdure.py。请注意,在每次迭代 ell 中,都会进行大量的计算,从而得出标记为 total 的值。将随机段落写入标签 total 下的给定文件名。并行进程不应将段落混合在一起,但所有进程应写入同一文件。

我尝试使用mpi4py包实现mpi,但由于获得的性能类似于serial_procedure.py,因此我似乎并没有正确获得它。

序列过程

multicore_procedure.py

多核程序

import numpy as np
import csv
import lorem
import time

# data
high=2**10;
nsamples=2**18;
labels=np.random.randint(0,high,nsamples)

# Serial version
serial_start_time=time.time()
filename='serial.txt'
total=0
with open(filename,'w') as file:
    for ell in labels:
        # supposedly intensive computation:
        for k in range(ell):
            total=total+k; 
        w = csv.writer(file) ;
        w.writerow([total])
        w.writerow(['****'])
        w.writerow(lorem.paragraph())
        total=0;
serial_time=time.time()-serial_start_time;
print('Serial write takes '+ str(serial_time)+' seconds')
# Serial write takes 43.09408092498779 second

0 个答案:

没有答案