Python并行计算与高性能计算7迎接并行计算革命
在本章中,我们将介绍我们在前几章中看到的并行编程的实际方面。随着并行计算概念的扩展,它不仅包括并行编程及其相干方面,还包括能够管理并专门筹划的基础办法。超等计算机通常被定义为由许多 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 模式的加快,分析的地理区域越来越小,但各处理器之间的重叠区域也越来越大,从而增长了信息互换,降低了模式的性能。
数值天气预告模式必要进一步改进的另一个关键点是参数化部分。气象学中有许多物理过程无法直接预测。这些都是简短、复杂或人们还不甚相识的现象,因此要根据履历或统计考虑,使用适当的参数将其引入模式。此外,在这种情况下,开发新的算法,充分使用并行计算,将能够更好地应对这些额外的因素,从而提高预告的有效性和准确性:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124161930252-1439882590.png
天气模式的一些因素: 1. 进入的太阳辐射,2.气溶胶和分子的散射,3.雪,4.雨,5.凝结,6.深对流,7.云的长波辐射发射,8.植被,9.蒸发,10.云的反射/吸收,11. 地形,12. 水覆盖率,13. 湍流,14. 地球表面的反射/吸收,15. 地球表面的长波辐射发射。
至于 Python,可以报告 Metview。该平台提供了一个实用的气象工作站,旨在提供一个全面的气象数据研究和分析情况。它包括许多工具,可在各个阶段为分析活动提供便利。通过不同格式的转换器,可以方便地访问现有的多种数据源。此外,还有许多处理和显示数据的工具。所有这些操纵都通过使用 Python 语言的脚本命令来管理:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124162351324-325083801.png
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/):
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124164914942-351105709.png
7.3.3 地震学
我们已经看到了研究大气层的模型和研究大洋体的模型,研究构造板块活动的模型也不能缺少。尤其是地壳活动及其最严重后果的预测:地震。
地震学也是一门复杂的科学,其研究以使用复杂的模型为基础,除非使用大量获取的数据,否则无法轻易计算出这些模型。在这一领域进行预测甚至比气象学和海洋学更加困难。这重要是由于底层地形的性质不易察觉。
在这方面,可以使用地震勘探方法,这种方法是基于地震波穿过地壳时的反射。当地震波穿过地壳时,当它遇到分隔两个不同土层的界面时,就会反射一部分地震波。最后,会产生一系列不同形状和强度的反射波,这些反射波必须被探测到,并以数据的情势记录下来,然后根据这些数据推断出一个能够重建泥土下层的模型。这些模型的计算也完全基于并行计算:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124165234778-1718486620.png
Python 有一个专门的库: Obs-Py(https://docs.obspy.org/)。这是一个开源库,它为研究人员提供了一个有效的地震数据处理框架,并提供了一系列专用于这些特定技能的工具,如地震波记录的信号处理。
7.3.4 天体物理学
天体物理学是另一个科学分支,其最新进展重要归功于并行处理模拟。
恒星的行为和演化是天体物理学的一个研究课题,现在重要是使用流体力学和磁流体力学等复杂的物理定律进行模拟。参考系为球面几何,模型使用频谱代码,其中物理量根据正交方向的球面谐波和径向的切比雪夫多项式进行细分。显然,这类计算相当复杂,只有使用高性能计算系统(如大规模并行架构(超等计算机))才能进行处理。
事实证明,这类模拟计算的结果非常精确,使天体物理学在这一领域取得了巨大进步:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124165733881-189735398.png
在 Python 中,有一些关于恒星行为和演化的模拟接纳了一种更新颖的方法,即 “盒中星”(star-in-a-box)。这些模拟基于不同的模型,以笛卡尔几何为基础,将恒星封闭在一个立方体盒子中(见图 7.5)我们可以看到,使用 Python 提供的科学库,如 SciPy、NumPy、Matplotlib 和 Pypar(另一个促进 Python 并行实验的库),可以得到相当精确的结果。
除了恒星行为之外,天体物理学近来还在解决一些直到近来还被认为不大概解决的问题。超新星爆炸、星系活动及其大概的碰撞和归并,以及黑洞的行为,例如当黑洞吞噬恒星时的行为,都是非常复杂的问题。这些模拟所使用的模型非常复杂,必要巨大的计算能力。
为了更好地理解这些科学学科及其进展是怎样与并行处理技能的进步紧密接洽在一起的,我们可以举一个例子。2019 年,一个困扰天体物理学家四十多年的黑洞问题得到相识决。美国西北大学、阿姆斯特丹大学和牛津大学的研究人员在模拟中证明,围绕黑洞运行然后坍缩成黑洞的最内层物质与这些黑洞排成一线。这一演示只有在获准使用强盛的超等计算机进行模拟后才有大概实现。由此可见,随着计算能力的提高,许多至今无法解决的其他问题也将迎刃而解。
至于对超新星和新星等恒星的爆炸和对流活动的研究和模拟,在 Python 中,有一系列在不同模块中实现的算法,如 Michael Zingale 分发的算法:https://zingale.github.io/index.html。在他的网站上,有一些这方面的有趣项目,代码可从 GitHub 下载:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124165829928-903512205.png
天体物理学界使用的一个工具包是用于体积数据分析和可视化的 yt,特殊是其 yt_astro_analysis 扩展。通过它,我们可以对高性能计算(HPC)系统上模拟天体物理现象所生成的数据进行分析和可视化。在不同平台上生成的数据每每互不兼容,而如许的工具能够将它们整合起来,并通过并行计算创建可视化表现,进行精确分析。该软件包也存在于 Anaconda 上,可通过以下命令安装:
conda install -c conda-forge yt_astro_analysis有一个包罗大量文档和示例的良好网站 (https://yt-project.org/doc/cookbook/index.html),其中许多示例都以 Jupyter 笔记本的情势列出:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124170221197-337630545.png
7.3.5 石油和能源行业
资源勘探是一种网络和管理石油、天然气等能源资源信息的方法。计算机有助于发现和管理这些资源。石油和天然气公司正在探索各种大概的新方法,以提高在地下发现碳氢化合物的概率。
测井网络的数据包括探测器和传感器报告的数千兆字节的信息。必须对这些数据进行分析,以重建岩石、石油、天然气和水层的存在、范围和深度。要处理如此大量的数据,高性能计算系统和方法是必不可少的。只有它们才能处理如此大量的数据并提取须要的信息。
例如,在美国休斯敦,有一台名为 “布巴 ”的超等计算机(全球速率最快的计算机之一),由数千个在冷冻油浴中冷却的英特尔至强 Phimultiprocessor 组成。这种特殊技能可以提高这种处理器的性能和计算速率。这台超等计算机属于地质处理公司 DownUnder GeoSolutions,正是用来进行这类计算的。由此,我们可以相识到,无论是科研部分照旧对业务感兴趣的私营公司,现在都对模拟和并行计算的重要性非常敏感。
就 Python 而言,比年来我们可以在文献中找到一些报告分析和模拟示例的出版物,并解释其利弊。
7.3.6 金融
除了学术和政府研究机构,金融机构也越来越多地大量使用基于并行计算的处理系统。如今,几乎所有银行业务的重要方面都是基于并行计算系统进行的操纵。由于底层区块链的复杂性,加密货币也必要先进计算系统的支持,这些系统可以共同使用并行计算。
其中最具吸引力的方法是定量金融,也称为定量分析。这门学科基于数学和统计方法在金融领域的应用。其基本过程包括搜索大量的市场数据,寻找可以在某种水平上提示趋势的模式或相干性,从而应用策略。其他目的还包括价格趋势、风险管理和投资管理。
当今的技能可以通过大数据访问海量数据流,并从中提取用于量化金融的数据。因此,有许多算法和方法都倾向于使用大数据技能以及并行计算系统上的数据分析和处理技能。
在 Python 中,文献和网络上也有大量实例,描述了使用并行计算的算法和方法的研究和应用。通常,这些应用中的许多都使用了机器学习,Python 提供的大量库为机器学习提供了富足的空间,但也有一系列专门的金融活动库,它们对于金融模型的创建和研究至关重要。我们将介绍其中一些对感兴趣的人大概有效的库。
Quandl 是一个允许您访问从中央银行、政府、跨国组织和许多其他泉源网络的大量经济、金融和市场数据的库。大多数数据集在注册后可免费访问,而其他数据集则必要付费。
Zipline 和 Pyfolio 是另外两个库,它们允许你对金融数据进行初步处理,例如由 Quandl 网络的数据,它们的接口实现得很好。这两个库都为生意业务的专门算法提供了巨大支持。此外,Pyfolio 还能让你轻松获得包罗业绩统计数据的拆页,其中包括年/月回报率、回报率量化值、滚动贝塔/夏普比率和投资组合周转率等重要参数:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124170640207-140651141.png
此外,还有一些库,如 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-lib7.3.7 工程筹划
有限元分析(FEA Finite Element Analysis)是使用称为有限元方法(FEM Finite Element Method)的数值技能模拟任何给定的物理现象。
工程师使用有限元分析模拟来再现虚拟原型在各种条件下的行为,而无需实际制造。从这些模拟中网络到的数据可以优化部件、材料和形状的选择,而不必每次都进行实际制造和测试,从而浪费时间和金钱。然而,要做到这一点,必须使用尽大概模拟现实的数学模型,而且能够量化物理和结构现象的影响,如热传导、波的流传、抗压性等。因此,这些模型大多由偏微分方程(PDE)来描述。
有限元分析方法是当今最成功的管理此类计算的技能,并取得了杰出的成果。很显着,要想进行越来越精确和高效的有限元分析,就必须使用高性能计算机来进行并行计算。在有限元分析中,大量偏微分方程必要同时求解,然后并行处理。
为了进行模拟,必要创建一个由数百万个小元素组成的网格,这些元素共同构成了结构的形状。
对每个单独的元素进行计算。将单个结果组合起来,就能得到描述整个结构的最闭幕果。这意味着在描述元素的点(节点)所获得的值之间的空间引入了近似插值。
也就是说,你知道某些点的值,但不知道所有点的值。可以通过使用越来越复杂的系统或在分析中增长有限元的数量来改进插值。但这一切都要以牺牲计算能力为代价,必要更复杂的计算和更大的内存。因此,要提高这些模拟的性能和准确性,显然有须要改进进行模拟的计算工具。
事实上,并行计算技能的进步也在改善有限元分析和模拟结果。
就 Python 中的有限元方法而言,我们有许多可用的项目和库:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124170958285-68361745.png
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 sfepy7.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 种化合物中,只有一种能被证明是成功的药物。因此,加快和简化埋伏药物的模拟和分析阶段,显然可以淘汰开支。
分子对接是一种包括取样和评分的技能。这项工作包括对分子大概出现的空间构型进行取样,并计算与酶结合时每种构型的评分函数。
这项工作的计算成本很高,但很容易并行化。此外,药物评估中使用的许多算法也可以并行化,从而提高整个过程的性能。
将这些技能应用于超等计算机,可以提高计算速率,从而缩短提取埋伏药物所需的时间。
不外,现在的研究工作仍然非常活跃,因此为许多其他创新开辟了前景:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124172224617-465609763.png
现在有许多分子对接软件,包括用 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 等并行计算。另一种方法是使用分布式系统或云,在这些系统或云中开发生物信息学计算管道,这些管道可以表现为工作流:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250124172403948-1042456159.png
现在已经有一些工作流系统,如 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 biopython7.3.11 娱乐--游戏和电影
在各种科学和工业领域应用如此之多之后,人们会惊奇地发现并行计算在娱乐界也有根基。鉴于 GPU 最初是为视频游戏中使用的重图形负载而筹划的,因此这并不令人惊奇。事实上,正是视频游戏市场鼎力大举推动了能够增强游戏(尤其是 3D 情况)结果的特殊处理器的发展。游戏在不绝发展,现在已经到达了很高的水平,其中的图像流通、交互功能丰富(通常由人工智能引导),构成了越来越逼真的场景(偶然甚至逾越真实场景)。事实上,我们正是在这里发现了图形卡内在高度并行结构的潜力。
7.3.12 游戏引擎
大多数游戏都有一个称为游戏引擎的复杂结构,它是游戏运行的核心。
市场上有多种游戏引擎模型,可用于制作视频游戏。其中最重要的有
• The Unreal Engine
• Unity
• Godot
这些功能强盛的游戏引擎易于使用,可以使用智能功能创建风雅的应用程序,确保逼真的游戏体验:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250126111729531-1474311933.png
对于开发人员来说,虚幻引擎提供的用户界面可以让您以简朴的方式开发游戏,同时充分使用现有的最强盛的技能,包括图形(由 GPU 支持)和学习(人工智能)技能,从而可以在三维情况中获得主体的流通动作,并实现更强的交互性。这些游戏引擎在不绝发展,其中包罗了并行编程领域所有大概的创新,由于它充分使用了所有可用的技能。通常,这些技能会被重新用于以前看到过的其他领域。
游戏引擎的强盛功能还基于 3D 渲染。正是这一过程让玩家获得逼真的游戏体验。3D 渲染只不外是从三维建模开始创建图像。
游戏引擎创建的虚拟情况的三维物体模型必要颠末纹理绘制阶段。二维图像会覆盖这些物体的表面,使其呈现出物质外观,并根据照明方向计算出光泽度。然后再添加阴影等其他结果,最后形成二维图像,就像照片一样,将虚拟现实转换为现实图像。
使用的计算器功能越强盛,结果就越好,获得的图像也就越逼真。此外,这些图像必须为视频游戏的每一帧生成,就像电影的每一帧一样,必须流通,因此不难理解这种技能对计算能力的要求。除此之外,还有声音管理、人工智能、网络和内存的须要计算。
并行计算是优化游戏引擎底层进程的强盛工具。现在最强盛的游戏引擎都是通过多线程来使用 CPU 内核和 GPU 的。在我们的书中,我们已经看到 Python 不能很好地处理 CPU 上的多线程,事实上,这些游戏引擎都是基于 C# 和 C++ 等编程语言,而这些语言允许您在 CPU 上应用多线程:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250126111813018-1345307337.png
例如,在 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 并没有受到很大的限制。
我们看到,游戏引擎的工作原理是一个处理循环,目的是创建一个又一个帧。每一帧都是一系列处理过程的结果,其中包括物体在三维空间中的移动、贴图、渲染和用户交互。很显着,帧的生成会导致游戏的串行实验,在这个过程中,帧是按有序的顺序一个接一个地生成的。但在生成一个帧和另一个帧之间,并行计算的潜力可以得到充分发挥。在两个帧之间,线程和进程将并行产生和工作,以实验所有须要的使命,从而大大缩短处理时间。然后,框架的生成将是所有线程或进程完成实验并给出结果的同步时刻。它们之间的信息互换将在这一时刻完成,大大淘汰了同步负荷,并使系统能更快地从一个帧反应到另一个帧。
本文展示了两种实验模式:
锁定步进模式:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250126112025244-1306916734.png
自由步进模式(Free Step Mode),在这种模式下,并非所有组件都必须在每帧步进中同步,而是可以扩展到多个周期:
https://img2024.cnblogs.com/blog/3174021/202501/3174021-20250126112050011-1689308533.png
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 竣事语
通过本章,我们完成了对并行计算被证明是创新和研究的有效工具的学科和应用领域的概述。我们将数据分析和人工智能排除在外,这将是本书后续章节的主题,并将进行详细论述。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]