近年来,某些涉及复杂、大规模数据处理的软件领域的复杂程度越来越高。因此,现在在现代硬件上处理需要数小时,有时甚至数天或数周。处理各种模拟、能源分析、计算机辅助设计和计算机辅助制造 (CAD/CAM)、图形渲染、生命科学、财务和数据转换的软件尤其如此。加速这些软件包中的处理功能不仅可以提高用户满意度,而且可以在使用该软件的组织中实现更高的准确性、更好的决策和更高效的工作程序。因此,软件加速已成为这些领域软件组织的重中之重。
一种明显的软件加速方法是投资于更强大的计算机硬件。随着处理器技术的不断改进,这种方法作为短期决策是有效的。然而,从长远来看,它往往会失败,因为处理需求也往往会持续增加,并且在许多情况下结果不符合应用要求。对于大规模部署的软件,对强大服务器的投资可能非常昂贵。由于这些因素,软件组织越来越多地寻求并行和分布式处理系统作为加速耗时的计算应用程序的经济有效的方式。
并行计算选项
使用并行计算来加速高度复杂的计算过程并不是一个新概念。这种方法已经过测试和验证,并且随着最近价格实惠的多核和基于通用图形处理单元 (GPGPU) 的技术的涌入,它现在比以往任何时候都更加重要。
然而,选择正确的技术来加速耗时的计算过程远非一个简单的决定。实现并行或分布式系统的各种选项在最终的加速潜力以及直接开发成本和间接/长期成本(维护、基础设施、能源等)方面存在很大差异。在考虑将现有代码迁移到并行或分布式架构的平台时尤其如此。与更好的替代方案相比,选择不太理想的系统可能会导致直接和间接成本显着增加。
选择正确的并行或分布式架构的部分不确定性在于 耗时过程的多样性,每个过程都涉及不同的要求和考虑。在为特定流程选择加速方法时,重要的是要考虑所涉及场景的特征和限制。开发人员可以使用一些参数来表征高度计算的过程,然后选择适当的加速方法。
CPU 密集型与 I/O 密集型进程
某些类型的应用程序(例如数据仓库和企业资源规划)以广泛的数据访问为特征,而其他类型的应用程序(例如模拟、渲染和地形分析)通常更加强调算法或受 CPU 限制的复杂性。如果要并行执行的应用程序部分是算法而不是数据密集型(也就是说,它们受 CPU 限制多于 I/O 限制),则在本地网络上并行执行,或者在某些情况下超过应考虑广域网 (WAN),因为它有效地利用了可用的硬件资源。对于数据绑定较多且涉及读取和写入大量数据的进程,所选择的架构应解决预期的数据瓶颈,重点是高吞吐量磁盘和网络系统。
高度隔离与环境相关的过程
此特性指的是要并行执行的进程与主机环境之间的交互级别——特别是要并行运行的应用程序的大小和复杂性(可执行文件、库和二进制依赖项)、文件系统活动、以及访问其他环境数据库,例如注册表和环境块。一个高度隔离的应用程序涉及最少的此类交互;然而,依赖于运行时环境的应用程序通常需要并行计算体系结构来为相关计算机预先配置所需的全套软件和数据文件,或者包括一个虚拟化组件来模拟每个计算节点上的运行环境。存在几种并行计算环境中的虚拟化方法,
令人尴尬的并行与固有的串行过程(以及介于两者之间的所有过程)
使构建并行计算架构的开发工作变得复杂的一个问题是应用程序是否适合“切片”成多个可并行运行的独立可执行部分。一些遗留应用程序需要密集的代码结构重构才能实现这一点。其他人需要很少或根本不需要工作来准备应用程序以进行并行执行。最常见的例子是批量顺序数据处理,其中相同的过程一遍又一遍地执行,每次都使用不同的输入集。此类示例有时被描述为“令人尴尬的并行”,以表明将它们转换为并行执行模型的相对简单性。另一方面,一些应用程序“本质上是串行的”,并不适合并行执行。有了这些应用程序,
高端与经济高效的加速要求
商业并行计算平台成本差异很大,高端系统比低端系统高几个数量级。因此,通过迁移到并行计算环境来定义性能改进预期非常重要。根据定义,通过并行计算加速是一种收益递减的举措。在许多情况下,将执行时间减少 50% 到 70% 就足以使应用程序性能发生根本性的变化,而将其提高到 80% 到 90% 的额外价值并不值得投资。虽然低端和中端并行计算系统提供了合理的性能改进,但高端系统提供了 10% 到 20% 的额外加速,但其显着的额外成本并不总是合理的。
旧版应用程序与新开发的应用程序
出于显而易见的原因,转换最初设计用于串行执行的遗留应用程序比设计用于并行执行的新应用程序要耗时和昂贵得多。大多数并行计算平台都提供允许软件开发人员修改应用程序代码以利用该平台的 API。一些 API 比其他 API 更复杂,建议开发人员具有这些 API 的先前经验,以便与平台有效集成。
通过并行计算实现软件加速的方法
如前所述,商业并行计算平台的定价在低端和高端产品之间存在很大差异。此外,高端系统需要相当复杂的适配和管理,软件许可和专业服务的综合成本使价格差异更大,高端系统的成本有时比简单系统高几个数量级。
此外,在将现有应用程序迁移到并行计算架构时,重要的是要考虑适应并行计算平台(专业服务、编程和质量保证)所涉及的迁移成本。因此,建议选择一种方法,该方法将提供最少的功能集以充分满足软件项目的需求,而无需投资于不必要的昂贵的高端系统。
以下概述检查了当前的并行计算平台类别,并解释了每个类别与上一节中介绍的特征的关系。
使用多核和/或 GPGPU 进行本地并行化
近年来,随着强大的多核 CPU 和 GPGPU 的引入,在单机内使用并行计算资源加速计算过程的潜力已显着增长。虽然使用这些技术进行本地并行化的能力仍然受到硬件规格的限制,但在许多情况下,它们提供了一种具有成本效益的低端替代全面分布式系统。并行本地化还可以解决投资某些分布式计算技术所需的虚拟化技术的需要。使用多核和/或 GPGPU 的好处包括:
多核利用率:可以修改 CPU 绑定比 I/O 绑定更多的应用程序,以将不同的可执行部分作为单独的进程并行运行。当今的现代操作系统 (OS) 可以识别多个 CPU 内核,并且可以自动管理并行进程并将每个进程发送到使用不同的内核运行,从而实现有效的并行化。在具有简单并行分离潜力的应用中,这通常是一种成功的方法。这种方法的主要问题是硬件限制,因为每个系统中的内核数量是有限的,并且通常所有进程只共享一个磁盘驱动器。但是,可以使用 IncrediBuild-XGE(图 1)之类的系统来避免这些问题,该系统允许并行使用多个内核的应用程序自动使用本地网络中的所有可用内核。
GPGPU:这些组件正在迅速兴起,成为使用 PC 和服务器中现有并行资源实现加速的另一种方式。GPU 最初设计用于与一般处理任务并行处理面向图形的处理任务,现在可用于处理非图形处理任务,硬件供应商针对具有多个强大 GPU 的系统来推广这种方法。基于 GPU 的并行计算在线程级别执行(每个进程有多个并行线程,每个线程使用不同的 GPU)并涉及使用专用 API,例如 OpenCL 和 CUDA,这需要专业知识,有时还需要大量的开发工作。
图 1:使用进程虚拟化将进程分配到本地网络上的空闲资源。
内部(非通用)分布式计算实现
在涉及简单并行化挑战的场景中,其中目标应用程序高度孤立、令人尴尬地并行(或接近它),并且可以在不需要投资高端基础设施的情况下获得合理的加速结果,开发一个特定于应用程序的应用程序可能是可行的分布式计算实现。最简单的示例将涉及在单独的预定义服务器上并行运行应用程序的不同部分。目标应用程序的相对简单性可能使创建专有系统所涉及的开发和维护成本与改编商业系统相当,甚至更便宜。
这种方法的另一个优点是在开发专有系统时实现了高度的灵活性。然而,对于除了最简单的场景之外的几乎任何场景,在内部开发并行计算实现可能会导致昂贵的持续维护工作和处理通用系统已经解决的问题的复杂性,例如错误处理、可用性、可伸缩性、动态资源分配、管理要求和报告。
计算集群
计算集群是一组专用于共享应用程序工作负载的服务器。集群中的服务器运行同构环境,包括最新版本的运行时环境(应用程序和二进制依赖项)和对 I/O 文件的共享访问。拥有诸如计算集群之类的专用计算环境消除了对虚拟化的需求(参见上一节关于高度隔离与环境相关的进程),并提供了对计算集群的有效集中管理。这种方法的缺点是:
维护运行该软件的昂贵服务器的专用场会产生额外成本,并且不会利用连接到网络的现有硬件中未使用的计算能力。
集群通常专用于单个应用程序,不能支持多个应用程序。
将现有应用程序迁移到计算集群平台通常涉及大量软件开发以使应用程序适应使用集群 API。
基于集群的系统可以与高吞吐量存储以及网络硬件和软件相结合,以优化具有高端性能要求的数据绑定应用程序的性能。
网格计算
网格计算在某种意义上类似于集群计算,它涉及一组致力于解决一个共同问题的计算机,但不同于集群计算,它允许在同一个网格中混合异构系统(不同的操作系统和硬件)。网格系统也不限制对单个应用程序的使用,并且能够对连接到网格的系统进行更分布式的控制和管理。最后,就所涉及的节点数量而言,网格允许最大规模的分布式系统架构,大型系统有时会达到数千个互连节点。
一些网格系统不仅利用专用服务器的综合计算能力,还允许 PC 和工作站在运行其他计算任务时为网格贡献空闲的处理器周期。例如,使用 Microsoft Word 等文字处理工具编写文档的用户可以同时将 80% 到 90% 的空闲处理能力贡献给在网格上运行的计算任务。这种同时利用可以显着提高网格的潜在计算能力;然而,为了实现这一点,在网格上运行的应用程序需要修改以使用网格系统的 API。应用程序对环境的依赖程度越高,应用程序代码的更改就越广泛,以允许其利用非专用机器上的可用计算能力。
网格计算系统通常是具有最全面的特性集和功能的分布式并行处理产品。因此,它们在所需的专业知识方面也往往相当复杂,无论是在开发工作(将现有代码迁移到平台 API)还是在持续的维护和管理工作中。因此,建议在考虑基于网格的方法时评估这些方面。
网格系统可以是商业的或开源的。开源系统成本较低,但往往会留下项目未涵盖的开放端(调度、管理和物理实施方面),并且需要内部开发或与项目开发社区合作。因此,仔细评估完成开源系统中缺少的组件所涉及的总拥有成本非常重要。一些商业网格计算产品提供了更完整的功能集。
网格计算产品往往处于并行分布式系统价格范围的最高端。与基于集群的系统一样,基于网格的系统可以与高端产品相结合,以优化网络和存储瓶颈。
公共计算云
亚马逊的 EC2 和微软的 Azure 平台等公共云是一种计算形式,在这种计算形式中,云用户通过 Internet 从虚拟化计算场购买计算能力,而不是在存储在组织位置的计算机上运行的私有云。支付模式灵活,允许用户根据需求增减算力,只为随时间使用的算力付费。这大大减少了对现场硬件和基础设施进行长期投资的需要。公有云传统上用于业务应用程序,强调负载平衡要求而不是加速计算过程,但公有云高性能计算系统越来越受欢迎。
公有云高性能计算的优势包括:
灵活的按需付费许可
无需投资和维护专用硬件
不要求高端性能的应用的有效选择
缺点包括:
随着时间的推移,服务成本可能会很高
当敏感数据从组织的服务器传输到 Internet 时会引发安全问题
在某些情况下,通过 WAN 连接上传和下载大量数据的延迟可能会造成性能瓶颈
需要维护虚拟系统映像或修改平台 API 的代码或两者兼而有之,这可能非常耗时且需要专业知识
创建对公共云供应商和开放 Internet 连接可用性的依赖
应对异质性挑战的新方法
在加速与计算环境交互的应用程序(读/写文件、二进制可执行文件、动态链接库以及读取注册表和环境值)时,传统分布式计算系统面临挑战。
一种方法是专门为分布式应用程序预装所需的运行时环境和文件的计算集群。这可以满足应用程序的要求,但需要对专用服务器进行投资,并且不能利用连接到网络的现有 PC 和工作站中可用的计算能力。它还需要维护集群并确保它始终运行最新版本的运行时和数据环境。
虚拟化允许服务器通过每次加载不同的系统映像来按需更改运行时环境,从而提高可管理性并增加灵活性。但是,虚拟映像初始化形成了一个额外的瓶颈,并且与集群系统一样,它不能有效地利用现有计算机上有时大量的空闲处理能力。
一些网格平台提供的 API 在集成到应用程序代码时允许使用远程机器资源,而无需对这些机器进行大量预配置。在某些情况下,这有效地使非专用机器能够连接到电网并贡献它们的空闲处理能力。但是,这仅适用于某些场景,并且在大多数情况下需要对应用程序代码进行大量修改。
通过像 IncrediBuild-XGE 这样的平台进行流程虚拟化是一种新的并行分布式计算方法,它通过将基于集群的系统的迁移和部署相对容易性与网格系统的计算强度和灵活性相结合来实现软件加速。
使用进程虚拟化,启动器机器发送进程以在连接到网络的其他机器上并行执行。然后,这些进程将与当时在操作系统上运行的任何其他进程一起在这些机器上运行,但将在一个特殊的自包含虚拟环境中运行,该环境完全模拟启动器的环境,包括已安装的应用程序、文件系统、注册表和环境。这些虚拟进程将仅使用远程机器的空闲处理能力,以免干扰与网格活动无关的并发运行进程。资源协调模块还确保随时将进程分配给系统中最强和最可用的节点。
由于虚拟化是在进程级别执行的,因此无需为平台编写代码并将特定于平台的 API 集成到应用程序源代码以将应用程序迁移到网格。相反,IncrediBuild-XGE 使用一个紧凑的 XML 定义文件,该文件指定哪些进程应该被外包给网格上的远程计算机,哪些应该始终在启动器上运行。与需要大量修改源代码的系统相比,这使得网格启用速度明显加快。例如,转换已经使用本地并行化(在单台机器上并行 CPU 或内核中运行的进程)的应用程序通常需要不到一个小时的时间。由于不再需要维护虚拟映像库或集群环境,因此也降低了持续维护成本。
最终结果是一个分布式处理应用程序加速平台,可有效加速新旧应用程序,实现快速集成并降低维护成本。
审核编辑:郭婷
-
cpu
+关注
关注
68文章
10824浏览量
211094 -
计算机
+关注
关注
19文章
7409浏览量
87691 -
虚拟化
+关注
关注
1文章
366浏览量
29773
发布评论请先 登录
相关推荐
评论