Python并行计算——使用gather
以Python并行计算PI值为例,本文中用到了python并行库mpi4py,在运行前安装对应的操作系统版本MPI,本文以Windows操作系统为例。
该段为求PI值的串行程序:
from mpi4py import MPI
import numpy as np
import time
def pi_comput(step):
partial_pi = 0
dx = 1/step
for i in np.arange(0,1,dx):
partial_pi += 4/(1+i*i)
return partial_pi*dx
pi=pi_comput(100000)
程序中利用了高等数学中PI值求值公式。
接下来将求值分为分为6个进程,进程0为主进程,负责汇集各进程计算出的结果;其余5个进程每个进程计算总区间的1/5。
from mpi4py import MPI
import numpy as np
import time
def pi_comput(start,end,step):
# if end-start>0&&end<1&&start>0:
partial_pi = 0
dx = (end-start)/step
for i in np.arange(start,end,dx):
partial_pi += 4/(1+i*i)
return partial_pi*dx
# else:
# print("Bad value! try again: ")
comm = MPI.COMM_WORLD#初始化
size = comm.Get_size()
rank = comm.Get_rank()
t0 = time.perf_counter_ns()
if rank == 1:#进程1,以下类推
send_data = pi_comput(0,0.2,10000)
print ("process {} send data {} to root".format(rank, send_data))
elif rank == 2:
send_data = pi_comput(0.2,0.4,10000)
print ("process {} send data {} to root".format(rank, send_data))
elif rank == 3:
send_data=pi_comput(0.4,0.6,10000)
print ("process {} send data {} to root".format(rank, send_data))
elif rank == 4:
send_data = pi_comput(0.6,0.8,10000)
print ("process {} send data {} to root".format(rank, send_data))
elif rank == 5:
send_data = pi_comput(0.8,1,10000)
print ("process {} send data {} to root".format(rank, send_data))
elif rank == 0:
send_data=0
recv_data = comm.gather(send_data, root=0)#计算结果汇总
if rank == 0:
print ("process {} gather all data {}, the sum is {}".format(rank, recv_data,np.sum(recv_data)))#将各进程计算结果求和并打印
t1 = time.perf_counter_ns()
print('time cost: %s processor cycles'%(t1-t0))
MPI.Finalize()
上述文件保存为PI.py,计算文件保存位置,执行时在Powershell 或cmd,Anaconda Prompt等控制台中输入:
mpiexec -np 6 python 文件路径(此处为文件保存路径,执行时替换为你的保存位置)/PI.py
Python并行计算——使用gather相关推荐
- python 并行计算 并行方法总结 concurrent.futures pp pathos multiprocessing multiprocess模块 总结对比
目录 模块介绍文章 相近模块 1.按并行分类 (1)阻塞(非并行) (2)批次并行 (3)异步 2.按传参分类 (1)单个任务,任务多参数 (2)多个任务,任务单参数 (3)多个任务,任务多参数 3. ...
- python并行计算(完结篇):并行方法总结
转自:https://zhuanlan.zhihu.com/p/46678895 由于python相当易学易用,现在python也较多地用于有大量的计算需求的任务. 本文介绍几个并行模块,以及实现程序 ...
- python并行计算_《python并行计算(完结篇):并行方法总结》
由于python相当易学易用,现在python也较多地用于有大量的计算需求的任务.本文介绍几个并行模块,以及实现程序并行的入门技术.本文比较枯燥,主要是为后面上工程实例做铺垫.完结篇对前期介绍的所有模 ...
- 【Python并行计算】- Dask 让你的python更快更强
[Python并行计算]- Dask 让你的python更快更强 Dask(https://docs.dask.org/en/latest/) 是一个灵活的python并行/分布式计算的框架. 类似的 ...
- python并行计算之mpi4py的安装与基本使用
技术背景 在之前的博客中我们介绍过concurrent等python多进程任务的方案,而之所以我们又在考虑MPI等方案来实现python并行计算的原因,其实是将python的计算任务与并行计算的任务调 ...
- python并行计算|pycuda测试、对比及分析
python并行计算|pycuda测试.对比及分析 增量式学习算法能够同时学习网络的节点与参数,但是随着模型结构的增长,计算成本也越来越高,有两个途径可以减少计算所需的时间成本:(1)研究模型划分方法 ...
- Python 并行计算
Python 并行计算 一.实验说明 本实验介绍 Python 并行计算能够用到的工具. 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本课程实验环境使用Spyder ...
- Python并行计算简单实现
Python并行计算简单实现 multiprocessing包是Python中的多进程管理包. Pool(num)类提供一个进程池,然后在多个核中执行这些进程, 其中默认参数num是当前机器CPU的核 ...
- python并行计算numpy_【Nature文章摘录】NumPy: 从单机到分布式并行计算
原标题:[Nature文章摘录]NumPy: 从单机到分布式并行计算 点击上图,查看详情 本公众号的推送以互联网大数据技术为主,是<互联网大数据处理技术与应用><Python爬虫大数 ...
最新文章
- 怎么给el-select两级联动赋值_医保改革:支付范围、支付标准、支付方式的联动,大有可为...
- linux下mkdir
- 天才少年何恺明:高考状元的开挂人生
- NodeJS学习日记--VSCode下调试
- 如何理解Minor/Major/Full GC
- RocketMQ的Consumer详解之push和pull模式(长轮询)
- 轻松记账工程冲刺第二天
- linux_shell_根据网站来源分桶
- OracleDBA之数据库管理
- Linux中的/ dev / null
- 2021父亲节祝福话语、海报素材大全
- 摸爬滚打DirectX11_day08——.X文件的导入
- ubuntu查看系统版本
- 视频:青春期(青春痘1)
- 团队协作管理-任务追踪管理
- python导入py文件报错
- vscode在报错时候自动格式化代码
- VS Nuget的使用
- npj | 王德华/张学英等揭示荒漠啮齿动物通过“菌群-肠-肾”轴耐受高盐的机制...
- 新概念英语第一册 (1)