登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
园子
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
帖子
用户
软件
问答
教程
代码
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
群组
›
IT互联网
›
网站
›
程序园子
›
一文速通Python并行计算:00 并行计算的基本概念 ...
一文速通Python并行计算:00 并行计算的基本概念
[ 复制链接 ]
左丘纨
2025-5-29 17:19:08
一文速通 Python 并行计算:00 并行计算的基本概念
摘要:
该文介绍了 Python 并行计算的核心概念、编程模型及其应用,并介绍了了并行程序的性能分析与优化方法,如并行效率、加速比及 Amdahl 定律。此外,该文介绍了共享内存、消息传递、数据并行和任务并行等并行编程模型,并提供 Python 环境配置指南。
关于我们更多介绍可以查看云文档:Freak 嵌入式工作室云文档,或者访问我们的 wiki:https://github.com/leezisheng/Doc/wik
原文链接:
FreakStudio的博客
往期推荐:
学嵌入式的你,还不会面向对象??!
全网最适合入门的面向对象编程教程:00 面向对象设计方法导论
全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念
全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类
全网最适合入门的面向对象编程教程:03 类和对象的 Python 实现-为自定义类添加属性
全网最适合入门的面向对象编程教程:04 类和对象的Python实现-为自定义类添加方法
全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签
全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装
全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解
全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器
全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系
全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则
全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法
全网最适合入门的面向对象编程教程:12 类和对象的Python实现-Python使用logging模块输出程序运行日志
全网最适合入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装使用
全网最适合入门的面向对象编程教程:全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法
全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法
全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则
全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“
全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图
全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释
全网最适合入门的面向对象编程教程:20 类和对象的Python实现-组合关系的实现与CSV文件保存
全网最适合入门的面向对象编程教程:21 类和对象的Python实现-多文件的组织:模块module和包package
全网最适合入门的面向对象编程教程:22 类和对象的Python实现-异常和语法错误
全网最适合入门的面向对象编程教程:23 类和对象的Python实现-抛出异常
全网最适合入门的面向对象编程教程:24 类和对象的Python实现-异常的捕获与处理
全网最适合入门的面向对象编程教程:25 类和对象的Python实现-Python判断输入数据类型
全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句
全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现
全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总
全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用
全网最适合入门的面向对象编程教程:30 Python的内置数据类型-object根类
全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type
全网最适合入门的面向对象编程教程:32 Python的内置数据类型-类Class和实例Instance
全网最适合入门的面向对象编程教程:33 Python的内置数据类型-对象Object和类型Type的关系
全网最适合入门的面向对象编程教程:34 Python的内置数据类型-Python常用复合数据类型:元组和命名元组
全网最适合入门的面向对象编程教程:35 Python的内置数据类型-文档字符串和__doc__属性
全网最适合入门的面向对象编程教程:36 Python的内置数据类型-字典
全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式
全网最适合入门的面向对象编程教程:38 Python常用复合数据类型-使用列表实现堆栈、队列和双端队列
全网最适合入门的面向对象编程教程:39 Python常用复合数据类型-集合
全网最适合入门的面向对象编程教程:40 Python常用复合数据类型-枚举和enum模块的使用
全网最适合入门的面向对象编程教程:41 Python常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)
全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型
全网最适合入门的面向对象编程教程:43 Python常用复合数据类型-扩展内置数据类型
全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法
全网最适合入门的面向对象编程教程:45 Python实现常见数据结构-链表、树、哈希表、图和堆
全网最适合入门的面向对象编程教程:46 Python函数方法与接口-函数与事件驱动框架
全网最适合入门的面向对象编程教程:47 Python函数方法与接口-回调函数Callback
全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数
全网最适合入门的面向对象编程教程:49 Python函数方法与接口-函数与方法的区别和lamda匿名函数
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
全网最适合入门的面向对象编程教程:51 Python函数方法与接口-使用Zope实现接口
全网最适合入门的面向对象编程教程:52 Python函数方法与接口-Protocol协议与接口
全网最适合入门的面向对象编程教程:53 Python字符串与序列化-字符串与字符编码
全网最适合入门的面向对象编程教程:54 Python字符串与序列化-字符串格式化与format方法
全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
全网最适合入门的面向对象编程教程:57 Python字符串与序列化-序列化与反序列化
全网最适合入门的面向对象编程教程:58 Python字符串与序列化-序列化Web对象的定义与实现
全网最适合入门的面向对象编程教程:59 Python并行与并发-并行与并发和线程与进程
更多精彩内容可看:
给你的 Python 加加速:一文速通 Python 并行计算
一文搞懂 CM3 单片机调试原理
肝了半个月,嵌入式技术栈大汇总出炉
电子计算机类比赛的“武林秘籍”
一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库
Avnet ZUBoard 1CG开发板—深度学习新选择
工程师不要迷信开源代码,还要注重基本功
什么?配色个性化的电机驱动模块?!!
什么?XIAO主控新出三款扩展板!
手把手教你实现Arduino发布第三方库
万字长文手把手教你实现MicroPython/Python发布第三方库
文档获取:
可访问如下链接进行对文档下载:
https://github.com/leezisheng/Doc
该文档是一份关于
并行计算
和
Python 并发编程
的学习指南,内容涵盖了并行计算的基本概念、Python 多线程编程、多进程编程以及协程编程的核心知识点:
正文
在阅读本文档之前,需要注意的是,本文档不涉及对计算机体系结构(SISD\MISD 等)和内存组织、以及 MPP 大规模并行处理、异构计算等知识点讲解,主要侧重于基于 Python 语言的多线程并发、多进程并行、任务同步、消息传输、调试测试等知识点的实现和应用。
1.1 什么是并行计算?并行计算的特点
什么是传统的串行计算?传统的软件是按照串行计算的编程思想来编写的。串行计算程序是运行在具有一个核心(或 CPU)的单机上。
一个等待解决的问题被分解为一串独立的命令执行(instructions 命令执行流,也可以是线程)。命令执行流会一个挨一个的,顺序执行。
并且在任一时刻都只有一个命令执行流正在执行中。 换句话说,任何时候只有一个线程在执行。
并行计算用最简单的话来解释并行计算就是
同时使用 多个计算资源 (就是多个 CPU)去运行程序来解决一个需要大量计算的问题 。
并行计算程序运行在一个多核心(或多 CPU)的计算机、或者由多台计算机组成的网络上。需要进行大量计算的问题,
需要被分解成多个独立的、能够同时运行的部分。不同部分的命令执行流可以同时在不同的 CPU 上得到执行。
换句话说,在同一时间可以有多个线程在执行。
1.2 并行计算的关键概念
任务并行和数据并行:
任务并行是指在多个处理器上同时执行不同的任务;
数据并行是指在多个处理器上同时执行相同的操作,但是对不同的数据子集执行
。
并行度:
这是一个度量,
表示在给定时间内可以并行执行的任务数量。
并行算法和并行编程:
并行算法是设计用于并行计算的算法,而并行编程是实现这些算法的过程。
并行编程可能涉及使用特定的并行编程语言或并行处理库。
1.3 并行计算的学习内容
深入理解并行计算的概念
:除了理解基本的
并行计算概念
(如并行与串行的区别,数据并行与任务并行的概念等)外,还应深入研究
并行算法和并行编程模型
。了解各种
并行架构
(如共享内存、分布式内存和混合模型)以及
并行编程范式
(如消息传递、数据并行、任务并行和流并行)。
编写并优化并行程序:
使用 Python 的 multiprocessing 等编写更复杂的并行程序,例如实现并行排序或并行搜索算法。此外,学习并实践如何优化并行程序,包括负载平衡、减少通信开销、避免同步延迟等。
并行程序的性能分析:学习使用专门的工具(例如 Python 的 cProfile 模块或其他性能分析工具)来分析并行程序的性能。
理解并行效率、加速比、Amdahl 定律等概念,并学习如何使用这些概念来评估并行程序的性能。
理解并行计算的挑战和解决方案:
深入理解并行计算的挑战,
包括数据依赖性、竞态条件、死锁、并行开销等,并学习如何避免或处理这些问题。
理解并行编程中的同步和锁定概念,并学习使用 Python 的 threading 或 multiprocessing 库来处理并发问题。
1.4 并行编程模型
并行编程模型是描述并行程序设计和执行的高级概念。
这些模型为程序员提供了一种方式来组织和控制并行程序的计算和通信。有许多不同类型的并行编程模型,包括以下几种:
共享内存模型:
在这种模型中,所有处理器都可以访问同一内存空间。处理器通过读写这个共享的内存空间来进行通信。这种模型简单易用,但可能需要处理数据一致性和同步的问题。
消息传递模型:
在这种模型中,每个处理器都有自己的内存空间,处理器之间通过发送和接收消息来进行通信。这种模型适合在没有共享内存的分布式系统中使用。
数据并行模型:
在这种模型中,数据被划分成多个部分,每个部分在一个处理器上独立处理。这种模型适合处理大量的数据,并且每个数据的处理方式相同。
任务并行模型:
在这种模型中,不同的任务被分配给不同的处理器。每个任务可能需要执行不同的操作,且可能相互依赖。
选择使用哪种并行编程模型取决于问题的性质和可用的硬件资源。不同的模型可能需要不同的编程技巧和工具。
1.5 并行程序性能评价
在优化程序性能的过程中,性能分析是一个关键步骤。性能分析可以帮助你了解程序的运行情况,找出瓶颈,从而可以针对这些瓶颈进行优化。
Python 有一个内置的模块叫做 cProfile,它是一个非常强大的性能分析工具。
cProfile 模块可以提供关于你的程序哪些部分最消耗时间的详细统计信息。
使用 cProfile 模块,你可以看到你的程序中每个函数调用的次数,每次调用的时间,以及每个函数总共运行的时间。这些信息可以帮助你找出程序的瓶颈。
常用性能指标包括:
并行效率:并行效率是一个衡量并行程序性能的指标。
它是
串行程序运行时间与并行程序运行时间和处理器数量的乘积的比值。
并行效率的理想值是 1,这意味着并行程序的性能与处理器数量成正比。然而,
由于通信开销和同步延迟等问题,实际的并行效率通常会低于 1。
加速比:
加速比是
另一个衡量并行程序性能的指标。
它是
串行程序运行时间与并行程序运行时间的比值。
理想情况下,加速比应该等于处理器的数量,但实际上由于通信和同步等开销,加速比通常会低于处理器的数量。
Amdahl 定律:
Amdahl 定律是一个描述并行程序性能上限的定理。它指出,对于一个给定的问题,即使我们有无限数量的处理器,由于程序中的串行部分,我们的加速比也会有一个上限。
1.6 环境配置
本文档中示例代码需要的依赖库及其版本如下所示,我们使用 miniconda 配置最基本的 Python 环境即可:
这里我们使用 Pycharm IDE 进行编程:
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
签约作者
程序园优秀签约作者
发帖
左丘纨
2025-5-29 17:19:08
关注
0
粉丝关注
11
主题发布
程序园子
财富榜{圆}
敖可
9988
处匈跑
9998
森萌黠
9996
4
堵赫然
9996
5
凶契帽
9996
6
柴古香
9996
7
背竽
9996
8
斜素欣
9994
9
恐肩
9994
10
里豳朝
9994
查看更多