并行计算概述
并行计算是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效方法。它的基本思想是,利用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。在计算机术语中,并行性指的是把一个复杂问题分解成多个能同时处理子问题的能力。
**并行计算的概念:**并行计算的主要目标是提高求解速度,通过扩大问题求解规模,解决大型而复杂的计算问题。即将需要做大量运算、持续时间长的大型串行任务,根据大任务的内在相关性分解成若干个相对独立的模块并行执行,从而节约运算时间。
**并行计算:**开行计算是指同时使用多种计算资源解决计算问题的过程,是旨在提高计算机系统计算速度和处理能力的一种有效手段。它是由运行在多个部件上的小任务合作来求解一个规模很大的计算问题的一种方法。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问
题拆分成若干个部分,各部分均由一个独立的处理机来进行计算。并行计算系统实际上是一种由多个计算单元组成,运算速度快、存储容量大、可靠性高的计算机系统。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群,通过并行计算集群完成数据的处理,再将处理的结果返回给用户。
并行计算的内涵包括了并行计算机体系结构、编译系统、并行算法、并行编程、并行软件技术、并行性能优化与评价、并行应用等。此外,并行计算可以定位为连接并行计算机系统和实际应用问题之间的桥梁。它辅助科学、工程及商业应用领域的专家,为在并行计算机上求解本领域问题提供了关键支撑。
因此,为了成功实施并行计算,须具备3个基本条件:
(1) 并行计算机。并行计算机至少包含两台或两台以上的处理机,井且这些处理机通计网络能相互连接、相互通信。
(2)应用具有并行度。应用可以分解为多个子任务,这些子任务可以并行执行。将一个子任务分解为多个子任务的过程,便称为并行算法的设计。(3) 并行编程。在并行计算机提供的并行编程环境上,具体实现并行算法,编制并行程序并运行该程序,从而达到并行求解应用问题的目的。
并行计算之所以可行,主要在于并发性是物质世界的一种普遍属性,具有实际应用背景的计算问题在多数情况下都可以拆分为能并行计算的多个子任务。
并行计算的层次
并行粒度(Granularity) 是两次并行或交互操作之间所执行的计算负载。也就是任务级,即任务量的大小。并行计算的层次按并行粒度可分为:程序级并行、子程序级并行、语句级并行、操作级并行和微操作级并行,后三层大都由硬件和编译器负责处理,开发者通常处理前两层的并行,即程序级并行和子程序级并行,我们通常所说的并行计算也关注的是前两层。
并行度(Degree of Parallelism, DOP) 是同时执行的分进程数。
并行度与并行粒度大小常互为倒数:增大粒度会减小并行度。增加并
行度会增加系统(同步)开销。
并行度(Degree of Parallelism, DOP) 是同时执行的分进程数。并行度与并行粒度大小常互为倒数:增大粒度会减小并行度。增加并行度会增加系统(同步)开销。
一个数据分析任务能被切分为多个相互之间独立的计算任务并被分配给不同的结点进行处理,这种并行就叫程序级并行。程序级并行是一种粗粒度的并行,一个问题能实现程序级的
并行意味着这个问题很容易在集群中被执行,并且由于被切分的任务的独立的,子问题之间所需要的通讯代价也是非常小的,不需要在集群结点间进行大量的数据传输。程序级并行中的各个计算任务可以被认为是没有任何计算关联和数据关联的任务,其并行性是天然的、宏观的。
云计算与大数据关注的正是程序级并行。
并行计算机的发展
1.按时间看并行计算机的发展:
2.按应用特点看并行计算机的发展:
并行计算机的发展历程也可以简单地分为两个时代。
(1) 专用时代。包括向量机、MPP系统、SGI NUMA 系统、SUN 大型 SMP 系统,也包括我国的神威、银河、曙光1000等。之所以称为“专用”, 并不是说它们只能运行某种应用,是指它们的组成部件是专门设计的,它们的 CPU 板、内存板和 I/O板,甚至操作系统,都是不能在其他系统中使用。
(2) 普及时代。高性能计算机价格下降,应用门槛降低,应用开始普及。两个技术趋势起
到重要作用。其一是商品化趋势使得大量生产的商品部件性能接近了高性能计算机专有部件,标准化趋势使得这些部件之间能够集成到一个系统中,其中X86处理器、以太网、内存部件、Linux 操作系统的出现和发展都起到决定性作用。其二是目前高性能计算机的主流体系结
构之一是集群系统,它的技术基础和工业基础都实现了工业标准化,性价比非常高。
由于向量机和 MPP 受研制费用高、售价高等因素的影响,其市场受到一定的限制;SMP由于共享结构的限制,系统的规模不可能很大;而集群系统性能价格比较高,具有投资风险小、结构灵活、可扩展性强、通用性好、可继承现有软硬件资源和开发周期短、可编程性好等特点,成为主流并行计算机的发展趋势。
云计算所需要的最基本的硬件就是大量串联起来的服务器集群。为了解决大量密集的服务器串联会带来主机散热问题,云计算数据中心通常采用“货柜式”摆放法,即将大量的服务器集群规整地摆放在类似集装箱的机柜里。为了实现云计算平台的效用性,对大规模服务器集群必须采用具有大规模、可伸缩性、数据可重复性以及容错和平衡负载等特性的串联技术。例如 Google的Altanta 数据中心与 Oregon Dellas 数据中心都是互为备份的,为了维护服务器之间的负载平衡,将计算工作平均分配到服务器集群中去。
并行计算与分布式计算
分布式计算:
分布式计算主要研究分散系统(Distributed Svstem) 如何进行计算。分散系统是一组计算机通过计算机网络互连后形成的系统。分布式计算可以把程序放在最适合运行它的计算机上运行,实现共享稀有资源和平衡负载,这也是分布
式计算的核心思想之一。
并行计算是相对于串行计算来说的,并行计算主要目的是加速求解问题的速度和提高求解问题的规模。并行计算强调时效性和海量数据处理,各任务之间的独立性弱,而且关系密切,每个结点之间的任务时间要同步。即并行程序并行处理的任务包之间有很大的联系,并且并行计算的每一个任务块都是必要的,没有浪费的、分割的,就是每个任务包都要处理,而且计算结果相互影响,这就要求每个计算结果要绝对正确。
分布式计算是相对于集中式计算来说的。分布式计算的任务包相互之间有独立性,上一个任务包的结果未返回或者是结果处理错误,对下一个任务包的处理几乎没有什么影响。分布式计算的实时性要求不高,并且允许存在计算错误(因为每个计算任务给好几个参与者计算,上传结果到服务器后要比较结果,然后对结果差异大的进行验证。也就是说,分布式计算不强调时效性,各任务之间相互独立,所以结点节可以没有通讯,即无网络信息传输。每个结点之间的任务执行时间没有限制。
典型的分布式计算,如分析计算蛋白质的内部结构和相关药物的Folding@home 项目,该项目结构庞大,需要惊人的计算量,由一台计算机计算是不可能完成的。因此,该项目通过分布式计算技术把需要进行大量计算的工程数据分区成小块,分配给多台计算机分别计算,在各台计算机上传运算结果后,将结果统一合并得出数据结论。因此,有人认为分布式计算是并行计算的一种特例。
分布式计算中,很多任务块可以根本不处理,即有大量的无用数据块。因此,分布式计算的速度尽管很快,但真正的“效率”是低之又低的。分布式要处理的问题一般是基于“寻找”模式的。所谓的“寻找”, 就相当于穷举法。为了尝试到每一个可能存在的结果,一般从0~n (某一数值)被一个一个的测试,直到找到所要求的结果。事实上,为了易于一次性探测到正确的结果,可以假设结果是以某个特殊形式开始的。在这种类型的搜索里,也许一开始就找到答案,也许到最后才找到答案,即分布式计算中可能一直在寻找答案,但有可能永远都找不到,也可能一开始就找到了。而并行计算的任务包个数相对有限,在一个有限的时间应该是可能完成的。
并行计算与云计算
云计算需要解决:计算资源的透明虚拟化和弹性化、内存储资源的透明虚拟化和弹性化、外存储资源的透明虚拟化和弹性化、数据安全的保障、向开发者提供完善的 API 并实现终端用户向云计算的平滑过渡。云计算将一切隐在云端,普通用户不再关心数据存在哪里,不再关心数据的安全,不再关心应用程序是否需要升级,不再关心计算机病毒的危害,这一切的工作都由云计算负责解决,普通用户要做的就是选择自己喜爱的云计算服务商购买自己需要的
服务,并为之付费。云计算使普通用户有了享受高性能计算的机会,因为云计算中心几乎可以提供无限制的计算能力,计算的弹性化和存储的弹性化是云计算的重要特征。
云计算的计算能力的实现是从计算机的并行化开始的,即把多个计算机并联起来,从而获得更快的计算速度,这是一种很简单也很朴系的买现高速计算的方法,也被证明是相当成功的方法。
由于服务器的大量集中,服务器的失效成为经常的事情,传统的架构对于单点失效是很敏感的,而在云计算架构下单点失效成为系统认可的常态,任何的单点失效都不会影响系统对外提供服务。即云计算在构建系统架构时就将系统结点的失效考虑了进去,实现了基于不可信服务器结点的云计算基础架构。将服务器失效作为云计算系统的服务器集群模型是符合实际情况的,这种情况下单个服务器可以看作是不可信的结点,在系统设计时必须要将不可信服务器结点的失效屏蔽在系统之内,不向开发者和普通用户传递。在将服务器失效作为常态的服务器集群模型下,数据的安全性通过副本策略得到了保证。