Erlo

Python并行计算与高性能计算7迎接并行计算革命

2025-01-26 14:29:10 发布   20 浏览  
页面报错/反馈
收藏 点赞

在本章中,我们将介绍我们在前几章中看到的并行编程的实际方面。随着并行计算概念的扩展,它不仅包括并行编程及其相关方面,还包括能够管理并专门设计的基础设施。超级计算机通常被定义为由许多 CPU 和 GPU 组成的高性能系统,其中应用了并行计算和高性能计算 (HPC) 方法。本章概述了在并行计算中找到有效研究和创新工具的部门和学科。
结构
在本章中,我们将讨论以下主题:

  • 高性能计算 (HPC High-Performance Computing)
  • 并行计算(Parallel computing)
  • 仿真(Simulation)
  • 并行信号处理(Parallel signal processing)
  • 有限元方法(Finite element method)
  • 分子对接(Molecular docking)
  • 基因组学(Genomics)
  • 游戏引擎(Game engine)
  • 超级计算机 e HPC

7.1 高性能计算(HPC)

几十年来,超级计算机在科学研究中一直发挥着至关重要的作用。近年来,数据量迅速增加,许多应用领域都受益于高性能计算系统,即能够通过共享资源执行计算密集型操作的系统,从而在更短的时间内获得结果。
高性能计算技术可以在单台计算机或节点上运行,但其真正的威力在于创建集群,将许多计算机连接在一起,形成超级计算机。
超级计算机主要用于模拟、人工智能和海量数据分析。这三种操作是众多应用的基础,这些应用已在各个科学和工业领域占据一席之地并得到发展。

虽然超级计算机并不新鲜,但其所使用的新技术在过去 20 年中得到了巨大发展。计算速度和数据承载网络的指数级增长使得并行架构不仅是一个好主意,而且是一个必要的主意。大数据和物联网(IoT)等新技术正在产生数以万亿计的数据流,需要对其进行实时和同步分析。显然,只有将并行计算应用于功能更加强大的机器,才是处理如此大量数据的唯一解决方案。

7.2 并行计算

并行计算是一个更广泛的概念,也包括并行编程。事实上,并行计算是指在可同时提供多个处理器(无论是 CPU、内核还是 GPU)的架构上同时执行一个或多个程序。
因此,并行计算既可以在一个简单的系统中实现,在这个系统中,只有一个 CPU,而 CPU 中有更多的内核(例如,英特尔至强 W 有 28 个内核),也可以在超级计算机或计算机集群中实现,在超级计算机或计算机集群中,有成千上万个微处理器。在后一种情况下,我们称之为大规模并行计算。
因此,即使我们没有意识到,即使在日常生活的一小部分中,我们也在使用并行计算。我们的智能手机就使用了这种技术,即使在日常操作中,我们也从未离开过它几分钟。例如,如果我们的 iPhone 一次只能执行一个操作,那么所有操作的速度都会大大降低。打开一封电子邮件可能需要几秒钟,在不同的应用程序之间切换也不会如此迅速。市场上最新的系列智能手机可以追溯到 2010 年(iPhone4),如果我们考虑到目前智能手机的功能,这简直就是史前时代。下一代机型 iPhone 5 已经配备了 1.5GHz 双核处理器。而今天的 iPhone 11 拥有 6 个内核。三星 Galaxy Note 10 有 8 个内核。这些智能手机都是并行计算的典范,我们可以将其捏在手心。

7.2.1 并行计算的好处

程序运行速度更快是因为时钟速度更高,可能并不完全是因为并行执行,而并行化允许同一程序的不同部分同时执行。并行计算的优势在于缩短这些程序的执行时间或增加可同时处理的数据量。并行计算的功能越强大,就能解决越复杂的问题。节省时间往往意味着节省资金,这就是为什么并行计算正成为许多工业和工程部门的必选方案。就科学界而言,主要目标不是节省时间,而是能够解决日益复杂的问题。在这两种情况下,并行计算的主要使用模式都是模拟。

事实上,并行计算已被证明是模拟我们周围现实世界的理想选择。事实上,现实世界并不是串行的,我们周围的事物并不是一件一件发生的,而是同时发生的。越来越多的复杂数学模型通过并行计算来重建现实世界的某些部分,无论是宏观世界,如恒星或黑洞,还是微观世界,如分子和酶。随着并行计算的发展,人们可以使用越来越复杂的数学模型,减少近似值,从而生成越来越精确的模拟。对模拟中重建的系统的行为和特性进行研究,是许多科学和工业领域创新和研究的基础。

另一个证明需要使用并行计算的应用窗口是同时监控多个数据信号。您经常需要实时处理多个独立的数据流,这些数据流可提供海量数据,但需要作为一个整体进行处理。计算不仅要处理这些数据流,还要从中提取实时信息,这些信息对任何行动都非常有用。这类问题可以通过并行信号处理算法来解决,并行信号处理算法是对传统信号处理方法的扩展,其中并行计算功不可没。我们可以发现,这种方法在医学中的生物信号、金融中的股市趋势控制、地震学中的地层波研究以及其他许多应用中都有应用。
并行计算的项目和实例
在了解了并行处理对许多科学和工业部门进行的大多数分析和研究的重要性之后,让我们一起来看看一些更详细的例子。

7.3.1 气象学

气象学是一门以使用异常复杂的数学模型为基础的科学,这些数学模型考虑到了众多不断变化的气候和环境因素,目的是尽可能正确地预测未来几天的天气趋势。因此,要进行这类计算,显然需要使用主要基于并行计算的超强计算器。在这一特定领域,有必要介绍数值天气预报(NWP Numeric Weather Prediction)。

这是一种基于一系列描述流体流动的动态方程的天气预报方法。这个方程系统在数学上非常复杂,无法以这种形式求解。为了将这些方程提交给计算机,必须进行一系列处理,以便将其转换为数值方法。然后进行参数化,并施加初始条件和边界条件。遗憾的是,这些步骤都会引入近似值、遗漏、参数估计和其他因素,从而简化计算,但同时也会带来误差。
NWP 模式的目的是模拟某一地理区域大气的时间演变过程,以获得对气候趋势的预测。覆盖该地理区域的大气所占体积被划分为三维点网格,从而确定了其分辨率。并行计算处理技术的进步为提高模型的分辨率和计算速度提供了可能。模型的分辨率越高,预测的准确性就越高。然而,操作这种级别的模型越来越具有挑战性。尽管分辨率和模拟速度都在提高,但由于用于求解预测天气随时间演变的方程的数学算法对通信的要求,目前的算法已开始达到极限。
目前,这些算法结合了计算并行性和地理并行性。被分析的地理区域被划分为多个重叠部分,每个部分分配给不同的处理器。在预报计算过程中,每个处理器必须与其他参与计算的处理器交换有关重叠区域的数据,以考虑邻近地区的气候影响。
随着分辨率的提高和 NWP 模式的加速,分析的地理区域越来越小,但各处理器之间的重叠区域也越来越大,从而增加了信息交换,降低了模式的性能。

数值天气预报模式需要进一步改进的另一个关键点是参数化部分。气象学中有许多物理过程无法直接预测。这些都是简短、复杂或人们还不甚了解的现象,因此要根据经验或统计考虑,使用适当的参数将其引入模式。此外,在这种情况下,开发新的算法,充分利用并行计算,将能够更好地应对这些额外的因素,从而提高预报的有效性和准确性:

天气模式的一些因素: 1. 进入的太阳辐射,2.气溶胶和分子的散射,3.雪,4.雨,5.凝结,6.深对流,7.云的长波辐射发射,8.植被,9.蒸发,10.云的反射/吸收,11. 地形,12. 水覆盖率,13. 湍流,14. 地球表面的反射/吸收,15. 地球表面的长波辐射发射。
至于 Python,可以报告 Metview。该平台提供了一个实用的气象工作站,旨在提供一个全面的气象数据研究和分析环境。它包括许多工具,可在各个阶段为分析活动提供便利。通过不同格式的转换器,可以方便地访问现有的多种数据源。此外,还有许多处理和显示数据的工具。所有这些操作都通过使用 Python 语言的脚本命令来管理:

MetView 平台仅在 Anaconda Linux 和 macOS 上提供。要安装它,只需输入以下命令:

$ conda install -c conda-forge metview
$ conda update -c conda-forge metview
$ metview

几秒钟后,应用程序就会启动。该平台有许多有趣的使用示例,可通过页面上的一系列 Jupyter 笔记本查看:
https://confluence.ecmwf.int/display/METV/Python+Jupyter+Notebooks

7.3.2 海洋学

海洋学是与气象学应用类似模型的一个科学分支。这里考虑的不是大气层,而是巨大的海洋体积以及描述其随时间演变的所有因素和过程。同样,为了获得有效的模拟结果,需要使用只有高性能计算机才能处理的复杂模型。在这方面,并行计算的使用也至关重要。
这些研究的基础是通过数据库收集并分发给研究人员和分析人员的数据。这些数据大多来自欧洲气象卫星应用组织(EUMETSAT)或国家环境信息中心(NOAA)等政府机构收集的卫星观测数据。这些数据库提供从太空观测到的参数数据,如表面温度、水色、波高和冰厚。而其他数据库则提供与海底有关的海洋学数据以及与中间层有关的其他参数。
海洋学中最常提及的数据类型是 CTD 数据,即电导率、温度和深度。通过这些数值,我们可以确定海洋中各层水的物理特性,这对于获得海洋学中常用的 TS 剖面(温度-盐度)非常有用。
然后,所有这些数据都将用于模拟(与气象学中的大气模拟非常相似),使我们能够对未来的海洋状况做出预测。此外,在这种情况下,所使用的模型极其复杂,需要超级计算机的支持,以充分利用并行计算。
至于 Python,有一个网站收集了一整套与海洋学研究中涉及的各种操作相关的 Python 库:Sea-Py (https://pyoceans.github.io/sea-py/):

7.3.3 地震学

我们已经看到了研究大气层的模型和研究大洋体的模型,研究构造板块运动的模型也不能缺少。尤其是地壳运动及其最严重后果的预测:地震。

地震学也是一门复杂的科学,其研究以使用复杂的模型为基础,除非使用大量获取的数据,否则无法轻易计算出这些模型。在这一领域进行预测甚至比气象学和海洋学更加困难。这主要是由于底层地形的性质不易察觉。
在这方面,可以利用地震勘探方法,这种方法是基于地震波穿过地壳时的反射。当地震波穿过地壳时,当它遇到分隔两个不同土层的界面时,就会反射一部分地震波。最后,会产生一系列不同形状和强度的反射波,这些反射波必须被探测到,并以数据的形式记录下来,然后根据这些数据推断出一个能够重建土壤下层的模型。这些模型的计算也完全基于并行计算:

Python 有一个专门的库: Obs-Py(https://docs.obspy.org/)。这是一个开源库,它为研究人员提供了一个有用的地震数据处理框架,并提供了一系列专用于这些特定技术的工具,如地震波记录的信号处理。

7.3.4 天体物理学

天体物理学是另一个科学分支,其最新进展主要归功于并行处理模拟。
恒星的行为和演化是天体物理学的一个研究课题,目前主要是利用流体力学和磁流体力学等复杂的物理定律进行模拟。参考系为球面几何,模型使用频谱代码,其中物理量根据正交方向的球面谐波和径向的切比雪夫多项式进行细分。显然,这类计算相当复杂,只有使用高性能计算系统(如大规模并行架构(超级计算机))才能进行处理。
事实证明,这类模拟计算的结果非常精确,使天体物理学在这一领域取得了巨大进步:

在 Python 中,有一些关于恒星行为和演化的模拟采用了一种更新颖的方法,即 “盒中星”(star-in-a-box)。这些模拟基于不同的模型,以笛卡尔几何为基础,将恒星封闭在一个立方体盒子中(见图 7.5)我们可以看到,利用 Python 提供的科学库,如 SciPy、NumPy、Matplotlib 和 Pypar(另一个促进 Python 并行执行的库),可以得到相当精确的结果。
除了恒星行为之外,天体物理学最近还在解决一些直到最近还被认为不可能解决的问题。超新星爆炸、星系运动及其可能的碰撞和合并,以及黑洞的行为,例如当黑洞吞噬恒星时的行为,都是非常复杂的问题。这些模拟所使用的模型非常复杂,需要巨大的计算能力。
为了更好地理解这些科学学科及其进展是如何与并行处理技术的进步紧密联系在一起的,我们可以举一个例子。2019 年,一个困扰天体物理学家四十多年的黑洞问题得到了解决。美国西北大学、阿姆斯特丹大学和牛津大学的研究人员在模拟中证明,围绕黑洞运行然后坍缩成黑洞的最内层物质与这些黑洞排成一线。这一演示只有在获准使用强大的超级计算机进行模拟后才有可能实现。由此可见,随着计算能力的提高,许多至今无法解决的其他问题也将迎刃而解。
至于对超新星和新星等恒星的爆炸和对流运动的研究和模拟,在 Python 中,有一系列在不同模块中实现的算法,如 Michael Zingale 分发的算法:https://zingale.github.io/index.html。在他的网站上,有一些这方面的有趣项目,代码可从 GitHub 下载:

天体物理学界使用的一个工具包是用于体积数据分析和可视化的 yt,特别是其 yt_astro_analysis 扩展。通过它,我们可以对高性能计算(HPC)系统上模拟天体物理现象所生成的数据进行分析和可视化。在不同平台上生成的数据往往互不兼容,而这样的工具能够将它们整合起来,并通过并行计算创建可视化表示,进行精确分析。该软件包也存在于 Anaconda 上,可通过以下命令安装:

conda install -c conda-forge yt_astro_analysis

有一个包含大量文档和示例的优秀网站 (https://yt-project.org/doc/cookbook/index.html),其中许多示例都以 Jupyter 笔记本的形式列出:

7.3.5 石油和能源行业

资源勘探是一种收集和管理石油、天然气等能源资源信息的方法。计算机有助于发现和管理这些资源。石油和天然气公司正在探索各种可能的新方法,以提高在地下发现碳氢化合物的概率。
测井收集的数据包括探测器和传感器报告的数千兆字节的信息。必须对这些数据进行分析,以重建岩石、石油、天然气和水层的存在、范围和深度。要处理如此大量的数据,高性能计算系统和方法是必不可少的。只有它们才能处理如此大量的数据并提取必要的信息。
例如,在美国休斯敦,有一台名为 “布巴 ”的超级计算机(全球速度最快的计算机之一),由数千个在冷冻油浴中冷却的英特尔至强 Phimultiprocessor 组成。这种特殊技术可以提高这种处理器的性能和计算速度。这台超级计算机属于地质处理公司 DownUnder GeoSolutions,正是用来进行这类计算的。由此,我们可以了解到,无论是科研部门还是对业务感兴趣的私营公司,现在都对模拟和并行计算的重要性非常敏感。
就 Python 而言,近年来我们可以在文献中找到一些报告分析和模拟示例的出版物,并解释其利弊。

7.3.6 金融

除了学术和政府研究机构,金融机构也越来越多地大量使用基于并行计算的处理系统。如今,几乎所有银行业务的主要方面都是基于并行计算系统进行的操作。由于底层区块链的复杂性,加密货币也需要先进计算系统的支持,这些系统可以共同利用并行计算。
其中最具吸引力的方法是定量金融,也称为定量分析。这门学科基于数学和统计方法在金融领域的应用。其基本过程包括搜索大量的市场数据,寻找可以在某种程度上提示趋势的模式或相关性,从而应用策略。其他目的还包括价格趋势、风险管理和投资管理。
当今的技术可以通过大数据访问海量数据流,并从中提取用于量化金融的数据。因此,有许多算法和方法都倾向于利用大数据技术以及并行计算系统上的数据分析和处理技术。
在 Python 中,文献和网络上也有大量实例,描述了利用并行计算的算法和方法的研究和应用。通常,这些应用中的许多都使用了机器学习,Python 提供的大量库为机器学习提供了充足的空间,但也有一系列专门的金融活动库,它们对于金融模型的创建和研究至关重要。我们将介绍其中一些对感兴趣的人可能有用的库。
Quandl 是一个允许您访问从中央银行、政府、跨国组织和许多其他来源收集的大量经济、金融和市场数据的库。大多数数据集在注册后可免费访问,而其他数据集则需要付费。

Zipline 和 Pyfolio 是另外两个库,它们允许你对金融数据进行初步处理,例如由 Quandl 收集的数据,它们的接口实现得很好。这两个库都为交易的专门算法提供了巨大支持。此外,Pyfolio 还能让你轻松获得包含业绩统计数据的拆页,其中包括年/月回报率、回报率量化值、滚动贝塔/夏普比率和投资组合周转率等重要参数:

此外,还有一些库,如 QuantLib 和技术分析库(TA-Lib),它们是用 C++ 开发的,但可以用 Python 使用,它们为金融世界提供了更先进、更专业的工具。QuantLib 允许您开发用于交易和风险管理的模型,提供了一套设计高级算法的工具,包括市场惯例、收益曲线模型、求解器、PDE 和蒙特卡罗。TA-Lib 还提供可与前一个库集成的其他金融工具,如重叠研究、动量指标、成交量指标、波动率指标、价格转换、周期指标、模式识别和金融统计功能。
所有这些库都可在 Anaconda 平台上使用,并可通过以下命令安装:

conda install -c anaconda quandl
conda install -c conda-forge zipline
conda install -c conda-forge quantlib
conda install -c conda-forge pyfolio
conda install -c conda-forge ta-lib

7.3.7 工程设计

有限元分析(FEA Finite Element Analysis)是使用称为有限元方法(FEM Finite Element Method)的数值技术模拟任何给定的物理现象。
工程师使用有限元分析模拟来再现虚拟原型在各种条件下的行为,而无需实际制造。从这些模拟中收集到的数据可以优化部件、材料和形状的选择,而不必每次都进行实际制造和测试,从而浪费时间和金钱。然而,要做到这一点,必须使用尽可能模拟现实的数学模型,并且能够量化物理和结构现象的影响,如热传导、波的传播、抗压性等。因此,这些模型大多由偏微分方程(PDE)来描述。
有限元分析方法是当今最成功的管理此类计算的技术,并取得了卓越的成果。很明显,要想进行越来越精确和高效的有限元分析,就必须使用高性能计算机来进行并行计算。在有限元分析中,大量偏微分方程需要同时求解,然后并行处理。
为了进行模拟,需要创建一个由数百万个小元素组成的网格,这些元素共同构成了结构的形状。
对每个单独的元素进行计算。将单个结果组合起来,就能得到描述整个结构的最终结果。这意味着在描述元素的点(节点)所获得的值之间的空间引入了近似插值。
也就是说,你知道某些点的值,但不知道所有点的值。可以通过使用越来越复杂的系统或在分析中增加有限元的数量来改进插值。但这一切都要以牺牲计算能力为代价,需要更复杂的计算和更大的内存。因此,要提高这些模拟的性能和准确性,显然有必要改进进行模拟的计算工具。
事实上,并行计算技术的进步也在改善有限元分析和模拟结果。
就 Python 中的有限元方法而言,我们有许多可用的项目和库:

PolyFem 是一个用 C++ 开发的库,但也用 Python 发布,提供不同 PDE 的计算方法,如

  • 拉普拉斯(Laplace)
  • 亥姆霍兹(Helmholtz)
  • 线性弹性(Linear Elasticity)
  • 圣维南-基尔霍夫弹性(St. Venant–Kirchhoff elasticity
  • 新霍肯弹性(Neo-Hookean Elasticity)
  • 斯托克斯(Stokes)
  • 纳维-斯托克斯(Navier–Stokes)

通过 JSON 接口或以编程方式定义一个类,可轻松设置要提交计算的问题。
该库也可在 Anaconda 平台上使用。要安装它,可以输入以下命令:

conda install -c conda-forge polyfempy

另一个选择是 SfePy,它也是一个用于通过有限元法解决一维、二维和三维耦合 PDE 系统的库。安装时,建议从 GitHub 上下载源代码并编译,但 Anaconda 平台上也有预编译版本:

conda install -c conda-forge sfepy

7.3.8 医学

并行计算也用于医学领域,尤其是图像处理。扫描人体和大脑的诊断设备使用非常先进的技术来生成图像。该领域最常用的技术之一是磁共振成像(MRI)重建,它可用于 X 射线图像的重建和脑纤维跟踪。

Python 作为一种科学编程语言,在这方面提供了一系列工具,特别是 mripy 等库,为磁共振成像重建提供了一系列计算工具,如机器学习函数、傅立叶变换和专门的神经网络,以实现这些目的。Sigpy 是一个充分挖掘并行计算(CPU 和 GPU)潜力的 Python 库。该库为信号处理任务提供了一系列工具,但它是为核磁共振成像重建而设计的,并提供了一个完全专用的模块:sigpy.mri。要安装后者,可以使用 Anaconda 平台:

conda install -c frankong sigpy
# (optional for plot support) conda install matplotlib
# (optional for CUDA support) conda install cupy
# (optional for MPI support) conda install mpi4py

但并行信号处理技术也在其他诊断领域得到推广。神经肌肉或心肺疾病患者需要持续监测。这种持续监测会以信号的形式产生大量数据,这些信号包含不同类型的有用信息,需要尽快处理。因此,我们也必须使用适合这类应用的信号处理算法。然而,一个特殊的特点是,这些数据需要实时处理,因此处理时间非常短。监测所产生的数据由不同类型的生物信号(一般包括心电图、呼吸、脑电图和肌电图)组成,所有这些信号都是同时采集的。处理这些数据以提取有用信息并非易事,需要大量的处理时间。很明显,传统方法会产生延迟和低效,鉴于我们讨论的是人类健康,这可能是至关重要的。
因此,向并行处理过渡是不可或缺的一步,这样才能使当前的监测系统更加高效,并能实时给出答案,以便在必要时及时干预。对病人生命体征突变的检测必须快速准确,以避免严重并发症的发生。
Python 中有一个专门用于此类信号处理的库,名为 BioSPPy。它是一个工具箱,集成了各种信号处理和模式识别方法,旨在分析最常见的生物信号,如 PPG、ECG、EDA、EEG、EMG 和呼吸信号。遗憾的是,Anaconda 发行版中没有这个库,但可以使用

pip install biosppy

即使是研究领域,如药物发现和基因组学,在其活动中也会大量使用复杂的算法。显然,这些算法从串行到并行的转换,以及利用这种编程优势的计算系统(超级计算机)的使用,正在经历着强劲的发展,并为这一领域带来了重大创新。

7.3.9 药物发现

药物发现是制药公司面临的最昂贵、最耗时和最具挑战性的任务之一。分子或肽的鉴定和优化需要在大量可用化合物中进行。要研究的分子必须满足特定的要求,如与相关目标(通常是酶)的高结合亲和力和特异性(分子对接技术)。后者与疾病有某种联系,激活-停用酶会使分子具有药物疗效。不仅如此,分子还必须具有良好的药效学和药代动力学特性,否则就有可能无法被同化或代谢过快,从而无法到达目标酶。模拟这种分析需要大量的计算资源和时间,因此非常有必要引入并行计算。
因此,制药业的发展也极大地推动了当前分析技术及其处理计算器的发展和创新。

因此,制药业的发展也极大地推动了当前分析技术及其计算器的发展和创新。
药物研发是一个巨大的市场,需要付出巨大的经济努力。尽管如此,据统计,在研发部门提出的 10,000 种化合物中,只有一种能被证明是成功的药物。因此,加快和简化潜在药物的模拟和分析阶段,显然可以减少开支。
分子对接是一种包括取样和评分的技术。这项工作包括对分子可能出现的空间构型进行取样,并计算与酶结合时每种构型的评分函数。
这项工作的计算成本很高,但很容易并行化。此外,药物评估中使用的许多算法也可以并行化,从而提高整个过程的性能。
将这些技术应用于超级计算机,可以提高计算速度,从而缩短提取潜在药物所需的时间。
不过,目前的研究工作仍然非常活跃,因此为许多其他创新开辟了前景:

目前有许多分子对接软件,包括用 C/C++ 制作的 Autodock,最近又推出了一个新版本,名为 Autodock-GPU,极大地挖掘了显卡的潜力。事实上,许多科学研究发现,最新版本的运行速度比原始版本快数百倍。
至于 Python,有一个名为 AutodockFR 的 Autodock 版本,可以在 https://ccsb.scripps.edu/adfr/downloads/ 上以套件的形式下载。
不过,还有其他用于分子对接的库。其中一个是 pyscreener,它有一个内部任务分配系统,能够有效地适应可用内核的数量,在内核和可用 CPU 之间并行缩放计算。
在付费解决方案中,值得一提的是 Acellera 公司提供的库,这些库可以免费使用(EULA 合同),但仅限于使用单个 GPU。其中 HTMD 是一种可编程环境,可用于模拟、分析和可视化分子系统。

7.3.10 基因组学

就基因组学而言,大量使用基于并行计算的超级计算机也是必要的。研究生物体的基因组需要能够操作和处理大量的数据和信息,如果没有能够并行工作的算法,就很难管理这些数据和信息。
基因组学是生物信息学中最具代表性的学科。比较不同生物体之间的 DNA 序列、基因和 RNA 等结构。然而,这些数据的维度非常大(TB 级),因此可以定义为生物大数据。如果不使用并行计算,使用普通计算机进行一次实验可能需要数周甚至数月的计算时间。因此,必须应用并行化和高性能计算技术来缩短这些处理时间,从而使管理、处理和分析这类数据成为可能。
然而,将生物信息学中使用的算法与并行计算结合起来并非易事,目前仍在研究和开发之中。有两种方法可以解决这一问题。目前正在重新设计 FASTA、BLAST、HMMER、ClustalW 和 RaxML 等软件,以便利用 MPI 等并行计算。另一种方法是使用分布式系统或云,在这些系统或云中开发生物信息学计算管道,这些管道可以表示为工作流:

目前已经有一些工作流系统,如 Tavaxy、Pegasus、Swift/T 和 SciCumulus,可以管理分布式基础设施中的生物信息处理。
至于 Python,有一个 pyrpipe 库,旨在通过完全使用 python 开发计算管道来处理 RNA-Seq 数据。该库既可在本地计算机上使用,也可在高性能计算环境中使用,并可轻松集成到 Snakemake 和 Nextflow 等工作流管理系统中。
该库可轻松安装在 Anaconda 平台上:

conda install -c bioconda pyrpipe

除了 pyrpipe 之外,Anaconda 发行版还包含大量生物信息学专用库,所有这些库都集中在一个名为 bioconda 的专用资源库中(https://anaconda.org/bioconda/repo)。

此外,在 Anaconda 上还有一个名为 BioPython 的库,其中包含一系列有用的分子生物学工具。可以使用以下命令下载

conda install -c conda-forge biopython

7.3.11 娱乐--游戏和电影

在各种科学和工业领域应用如此之多之后,人们会惊讶地发现并行计算在娱乐界也有根基。鉴于 GPU 最初是为视频游戏中使用的重图形负载而设计的,因此这并不令人惊讶。事实上,正是视频游戏市场大力推动了能够增强游戏(尤其是 3D 环境)效果的特殊处理器的发展。游戏在不断发展,现在已经达到了很高的水平,其中的图像流畅、交互功能丰富(通常由人工智能引导),构成了越来越逼真的场景(有时甚至超越真实场景)。事实上,我们正是在这里发现了图形卡内在高度并行结构的潜力。

7.3.12 游戏引擎

大多数游戏都有一个称为游戏引擎的复杂结构,它是游戏运行的核心。
市场上有多种游戏引擎模型,可用于制作视频游戏。其中最重要的有
• The Unreal Engine
• Unity
• Godot
这些功能强大的游戏引擎易于使用,可以利用智能功能创建精美的应用程序,确保逼真的游戏体验:

对于开发人员来说,虚幻引擎提供的用户界面可以让您以简单的方式开发游戏,同时充分利用现有的最强大的技术,包括图形(由 GPU 支持)和学习(人工智能)技术,从而可以在三维环境中获得主体的流畅动作,并实现更强的交互性。这些游戏引擎在不断发展,其中包含了并行编程领域所有可能的创新,因为它充分利用了所有可用的技术。通常,这些技术会被重新用于以前看到过的其他领域。
游戏引擎的强大功能还基于 3D 渲染。正是这一过程让玩家获得逼真的游戏体验。3D 渲染只不过是从三维建模开始创建图像。
游戏引擎创建的虚拟环境的三维物体模型需要经过纹理绘制阶段。二维图像会覆盖这些物体的表面,使其呈现出物质外观,并根据照明方向计算出光泽度。然后再添加阴影等其他效果,最后形成二维图像,就像照片一样,将虚拟现实转换为现实图像。
使用的计算器功能越强大,效果就越好,获得的图像也就越逼真。此外,这些图像必须为视频游戏的每一帧生成,就像电影的每一帧一样,必须流畅,因此不难理解这种技术对计算能力的要求。除此之外,还有声音管理、人工智能、网络和内存的必要计算。
并行计算是优化游戏引擎底层进程的强大工具。目前最强大的游戏引擎都是通过多线程来利用 CPU 内核和 GPU 的。在我们的书中,我们已经看到 Python 不能很好地处理 CPU 上的多线程,事实上,这些游戏引擎都是基于 C# 和 C++ 等编程语言,而这些语言允许您在 CPU 上应用多线程:

例如,在 Unity 游戏引擎中(见图 7.13)多线程被用于跨线程并行执行渲染进程。多线程并行执行大大减少了帧内进程的执行时间。因此,每秒可以生成更多的帧,从而使游戏更加流畅。事实上,这正是 GPU 发挥作用的地方,其架构设计可以比 CPU 更高效地解决像素纹理的计算问题。此外,极高的并行内部结构允许将计算同时分配给大量线程,从而大大减轻了工作量并缩短了执行时间。

此外,中央处理器还可以在此期间执行其他任务。由于中央处理器具有强大的数学计算能力,因此它们被并行用于执行数学计算,使三维环境更加逼真。物体的行为、冲击的效果、水中传播的波浪、对用户互动的反应,甚至是非玩家角色(NPC)的智能,都是由 CPU 的算法来处理的,CPU 的内核和线程一样多,都是为并行计算分配的。
正如 Python 所说,目前还没有这样的游戏引擎。现有的游戏引擎都是以库的形式发布的。PyGame 和其他 Python 游戏开发库无法在 CPU 上进行多线程运算,也没有达到使用其他编程语言(如虚幻引擎和 Unity)构建的游戏引擎的强大水平。但这并不妨碍新项目在未来取得优异成绩。

7.3.13 设计并行游戏引擎

英特尔网站上有一篇题为《设计并行游戏引擎框架》的精彩文章:
https://www.intel.com/content/dam/develop/external/us/en/documents/designing-a-parallel-game-engine-155986.pdf
这篇文章介绍了如何设计一个可能的游戏引擎。它可以很好地促进用 Python 开发新的游戏引擎。
一个好的游戏引擎设计应该是充分利用所有可用的处理器。我们已经看到其他游戏引擎利用了 CPU 的多线程优势。在 Python 中,我们没有这种可能性,但我们可以使用多处理器。就 GPU 而言,与其他编程语言相比,我们看到 Python 并没有受到很大的限制。
我们看到,游戏引擎的工作原理是一个处理循环,目的是创建一个又一个帧。每一帧都是一系列处理过程的结果,其中包括物体在三维空间中的移动、贴图、渲染和用户交互。很明显,帧的生成会导致游戏的串行执行,在这个过程中,帧是按有序的顺序一个接一个地生成的。但在生成一个帧和另一个帧之间,并行计算的潜力可以得到充分发挥。在两个帧之间,线程和进程将并行产生和工作,以执行所有必要的任务,从而大大缩短处理时间。然后,框架的生成将是所有线程或进程完成执行并给出结果的同步时刻。它们之间的信息交换将在这一时刻完成,大大减少了同步负荷,并使系统能更快地从一个帧反应到另一个帧。
本文展示了两种执行模式:
锁定步进模式:

自由步进模式(Free Step Mode),在这种模式下,并非所有组件都必须在每帧步进中同步,而是可以扩展到多个周期:

7.3.14 电影和三维动画

游戏引擎在创建三维环境方面的威力往往超越现实本身。用于创建视频游戏图像的一些技术也被用于制作电影。在最近许多电影的后期制作阶段,特效的使用越来越频繁(通常取自电子游戏),这样可以改进从现实中获取的图像,或制作新的超现实或昂贵的场景,让演员在其中活动。
色彩校正和光线追踪等技术利用 GPU 的强大功能来增强电影拍摄的图像效果。所有这些视觉效果通常被称为 VFX(视觉特效),是逼真图像、数字生成图像或其他图像处理过程的结果。
特效专家使用专门的软件来完成这项工作。例如,DaVinci Resolve Studio 就是一个大量使用 GPU 的特效处理平台(见图 7.16)。雷神托尔:爱与雷霆》(2022 年)和《子弹列车》(2022 年)等影片都使用了该软件,通过基于光线追踪技术的高质量渲染,对拍摄的图像进行色彩校正,以突出反射、对比和照明效果。所有这些工作都是使用 GPU 并行完成的:
图 7.16:DaVinci Resolve Studio 网页

光线追踪是一种渲染算法,通过一系列基于矢量的计算,在计算机图形中产生逼真的光线效果,这种技术需要大量的资源(计算昂贵)。因此,如果我们想象一下处理电影中部分图像的成本,就可以想象皮克斯等动画电影对资源的需求。这些电影时长约 2 小时,其中所有图像都是完全基于人工三维模型的环境渲染结果。
皮克斯动画工作室的自由程序员彼得-科林里奇(Peter Collingridge)透露,皮克斯拥有世界上最强大的 25 台超级计算机之一,由 2000 台机器和 24000 个内核组成,用于制作动画电影。尽管拥有如此强大的计算能力,但像《怪物公司》(2001 年)这样的电影仍需要大约两年的计算时间来渲染镜头。
显然,近年来皮克斯公司进一步提高了其超级计算机的计算能力,但同时也很明显,要实现这些完全基于三维动画、渲染效果越来越逼真的电影,需要巨大的计算能力,即使是地球上最好的超级计算机也不例外。

皮克斯(Pixar)等公司制作的动画电影越来越流畅逼真,细节越来越丰富,动作越来越复杂。
这清楚地表明,底层技术取得了许多进步,包括并行计算方面的创新。鉴于这些技术的特性,公众可以获得的信息并不多,但对于那些有兴趣在这一领域工作的人来说,并行编程显然是值得密切关注的。

7.3.15 结束语

通过本章,我们完成了对并行计算被证明是创新和研究的有效工具的学科和应用领域的概述。我们将数据分析和人工智能排除在外,这将是本书后续章节的主题,并将进行详细论述。

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认