很久没更新了,打算新开一个系列总结一下高性能计算的一些心得,其中有些内容是自己的理解,也有可能出现错误,希望大家能辩证看待。

什么是高性能计算( HPC )?

既然提到了高性能计算,就免不了展开讲讲什么是高性能计算。
下面摘录一些大厂对这个名词的理解:

NVIDIA:

高性能计算 ( HPC ) 是推动科学发展的关键工具之一。 通过跨多个计算节点利用 GPU 助力的并行处理能力,HPC 能够高效、可靠、快速地运行先进的大型应用程序项目。速度提升后可大幅提升吞吐量并降低成本,从而为科学发现铺平道路。

Red Hat:

高性能计算( HPC )通常是指在多个服务器上并行处理复杂计算。这些服务器组被称为集群,它们是由成百甚至上千台通过网络连接的计算服务器组成的。在 HPC 集群中,每台计算机通常被称为一个节点。

Intel:

  • 高性能计算 ( HPC ) 是一类可处理计算密集型任务的应用程序和工作负载。
  • 随着对 HPC 的需求不断增长,在学术和工业环境中,涉及大量数据的 AI 驱动型用例日益增多。
  • HPC 集群基于高性能处理器而构建,并搭载高速内存和存储以及其他高级组件。

可以发现各个大厂对于其定义并不相同,但可以看出,都是基于其在高性能计算中所扮演的不同角色而做出的不同定义。

英伟达在其中主要是贡献了 GPU 部分,而 GPU 作为图形处理单元,在最近几年的实际运用中,越来愈多的参与到了深度学习训练以及推理当中,在此不再展开,本文的重点不在于此。其对于高性能计算的描述就是体现其在高性能计算当中扮演重要的角色。

而对于 Red Hat 本身来说,高性能计算是用多个服务器所构建成的一套计算系统。考虑到 Red Hat 为其贡献了操作系统,以及各种的基础软件和组建,并提供了一些方便的集群管理工具以及监控系统。Red Hat 更关心高性能计算对于更多服务器的需求以及其中的操作系统的支持。

Intel 也是从自己的业务角度出发,更多的关注于高性能计算中的计算以及自己所生产的内存以及固态存储等设备。同时希望自己能从NVIDA手中抢夺一些 AI 计算的业务。

上面提到的这些,只是想说明,每个人或者组织都是从自己的角度出发,以自身的视角来看待高性能计算是什么。总的来说,高性能计算是一个系统性的技术或者说是解决方案,其中需要软件与硬件的相互协作。

高性能计算的发展历史也有段时间了,其诞生就是为了解决“计算”这一问题,而在发展中,人们逐渐认识到单台设备所能提供的算力是有限的,而近现代以来,几乎所有的高性能计算都主要以横向扩展为手段来提高整个集群所能提供的算力支持。提到这个,我们就引出了下面要介绍的内容– –并行计算。

并行计算( Parallel computing )

并行计算是多指令同步进行的计算模式,通过将复杂的计算任务分解,使其能够在同一时刻在多个处理器中同步进行处理。其目的在于提高作业( job )的计算速度,以及扩大问题的求解规模,从而解决复杂的计算问题。

其能够提供明显优于串行计算的计算效率,但同时也对程序的编写带来了更多的困难,需要开发并行程序的程序员能够对操作系统以及处理器的指令包括流水架构有更深入的理解。

在翻阅资料的过程中我又发现了一个之前没有注意到的细节,那就是并行计算( Parallel computing )并不等同于分布式计算( Distributed computing )

并行计算( Parallel computing )与分布式计算( Distributed computing )

并行计算和分布式计算其目的都是将复杂的问题简单化,通过并行化来获得更高性能,将一个大型的任务分解成多个较小的任务,从而在尽可能短的时间内获取最终的答案。

分布式计算可以说是并行计算的一种特殊形式,并行计算最大的特点在于共享内存以及任务之间的通信协同,也就是资源共享以及信息同步,而分布式计算的任务之间关联性不高,其任务先后结束也对整体计算影响不大,对同步没有要求。

其中并行计算需要解决的问题是资源的访问冲突以及通信所带来的额外开销,分布式计算则需要对任务的可靠性进行验证。

随着高性能计算的发展,在实际的工作与生活中,这些基本概念在非严格定义的情况下,已经混淆了并行计算以及分布式计算,同时由于问题所适用的最佳计算方法不同,并行计算和分布式计算可能会出现在同一个高性能计算系统当中,两者已经出现了一些融合趋势。


未完待续……