一文速通Python并行计算:00 并行计算的基本概念

68 阅读6分钟

在阅读本文档之前,需要注意的是,本文档不涉及对计算机体系结构(SISD\MISD 等)和内存组织、以及 MPP 大规模并行处理、异构计算等知识点讲解,主要侧重于基于 Python 语言的多线程并发、多进程并行、任务同步、消息传输、调试测试等知识点的实现和应用。

1.1 什么是并行计算?并行计算的特点

image

什么是传统的串行计算?传统的软件是按照串行计算的编程思想来编写的。串行计算程序是运行在具有一个核心(或 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 环境即可:

image

这里我们使用 Pycharm IDE 进行编程:

image

文章转载自: FreakStudio

原文链接: www.cnblogs.com/FreakEmbedd…

体验地址: www.jnpfsoft.com/?from=001YH