以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相关推荐

  1. python 并行计算 并行方法总结 concurrent.futures pp pathos multiprocessing multiprocess模块 总结对比

    目录 模块介绍文章 相近模块 1.按并行分类 (1)阻塞(非并行) (2)批次并行 (3)异步 2.按传参分类 (1)单个任务,任务多参数 (2)多个任务,任务单参数 (3)多个任务,任务多参数 3. ...

  2. python并行计算(完结篇):并行方法总结

    转自:https://zhuanlan.zhihu.com/p/46678895 由于python相当易学易用,现在python也较多地用于有大量的计算需求的任务. 本文介绍几个并行模块,以及实现程序 ...

  3. python并行计算_《python并行计算(完结篇):并行方法总结》

    由于python相当易学易用,现在python也较多地用于有大量的计算需求的任务.本文介绍几个并行模块,以及实现程序并行的入门技术.本文比较枯燥,主要是为后面上工程实例做铺垫.完结篇对前期介绍的所有模 ...

  4. 【Python并行计算】- Dask 让你的python更快更强

    [Python并行计算]- Dask 让你的python更快更强 Dask(https://docs.dask.org/en/latest/) 是一个灵活的python并行/分布式计算的框架. 类似的 ...

  5. python并行计算之mpi4py的安装与基本使用

    技术背景 在之前的博客中我们介绍过concurrent等python多进程任务的方案,而之所以我们又在考虑MPI等方案来实现python并行计算的原因,其实是将python的计算任务与并行计算的任务调 ...

  6. python并行计算|pycuda测试、对比及分析

    python并行计算|pycuda测试.对比及分析 增量式学习算法能够同时学习网络的节点与参数,但是随着模型结构的增长,计算成本也越来越高,有两个途径可以减少计算所需的时间成本:(1)研究模型划分方法 ...

  7. Python 并行计算

    Python 并行计算 一.实验说明 本实验介绍 Python 并行计算能够用到的工具. 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本课程实验环境使用Spyder ...

  8. Python并行计算简单实现

    Python并行计算简单实现 multiprocessing包是Python中的多进程管理包. Pool(num)类提供一个进程池,然后在多个核中执行这些进程, 其中默认参数num是当前机器CPU的核 ...

  9. python并行计算numpy_【Nature文章摘录】NumPy: 从单机到分布式并行计算

    原标题:[Nature文章摘录]NumPy: 从单机到分布式并行计算 点击上图,查看详情 本公众号的推送以互联网大数据技术为主,是<互联网大数据处理技术与应用><Python爬虫大数 ...

最新文章

  1. 怎么给el-select两级联动赋值_医保改革:支付范围、支付标准、支付方式的联动,大有可为...
  2. linux下mkdir
  3. 天才少年何恺明:高考状元的开挂人生
  4. NodeJS学习日记--VSCode下调试
  5. 如何理解Minor/Major/Full GC
  6. RocketMQ的Consumer详解之push和pull模式(长轮询)
  7. 轻松记账工程冲刺第二天
  8. linux_shell_根据网站来源分桶
  9. OracleDBA之数据库管理
  10. Linux中的/ dev / null
  11. 2021父亲节祝福话语、海报素材大全
  12. 摸爬滚打DirectX11_day08——.X文件的导入
  13. ubuntu查看系统版本
  14. 视频:青春期(青春痘1)
  15. 团队协作管理-任务追踪管理
  16. python导入py文件报错
  17. vscode在报错时候自动格式化代码
  18. VS Nuget的使用
  19. npj | 王德华/张学英等揭示荒漠啮齿动物通过“菌群-肠-肾”轴耐受高盐的机制...
  20. 新概念英语第一册 (1)

热门文章

  1. MFC--删除指定目录下的文件夹及其文件
  2. 0113连接wifi日记
  3. Configuration space(C-Space)
  4. 思科路由器、交换机配置Console 线线序 (亲测)
  5. 做错了的时候,不光要承认自己的错误,还要认打认罚,让别人在你身上把气出够了
  6. Python爬虫仅需一行代码----crawl第三方库
  7. 【Altium Designer】学习
  8. Android Drawable之ScaleDrawable
  9. java的invoke_java 中 invoke()的作用是什么?
  10. 为自己写下一份人生清单