不过,无论网络拓扑结构如何,高性能计算机节点间通信对于用户是透明的。其通信模式无外乎以下4种:
● 单播(Unicast):一个源节点到一个目的节点;
● 多播(Multicast):一个源节点到多个目的节点;
● 广播(Broadcast):一个源节点到全体节点;
● 会议(Conference):多个源节点到一个目的节点。
任务粒度划分
在很多情况下,对于一个给定的并发程序,并不是增加更多的处理节点就可以获得更多的性能,因为随着节点数目的增加,节点间通信开销、同步的开销等都会增加。因此为了提高整个系统的性能,需要在任务通信时做以下几点的均衡考虑:
● 所需处理节点的数目;
● 执行任务模块或划分的数目(如是否将一些小规模的任务组合在一起串行执行);
● 系统通信开销。
而对这些诸多因素的权衡分析就是通过对任务粒度(task granularity)的分析而得到的。一个比较通用的任务粒度的定义如下:
式中G是任务粒度,R代表程序执行的时间,C是以通信时延为主的额外开销。G越小则粒度越细,数据流计算中的程序指令就是一个细粒度的典型例子;另一方面,如果G越大则粒度越粗大,其典型的例子有任务的子程序、函数等。通常的细粒度的任务并行度高,但是通信开销大;粗粒度任务的并行度低,但通信开销小。
为了最大限度发挥高性能计算机的并行度,我们往往把减小系统通信延时作为任务划分的依据,即将一些任务划分到一个节点上串行执行,使得通信延时的减小效果超过串行执行对性能的影响。
静态调度与负载平衡
为了进一步减小并发程序的执行时间,在使用高性能计算机时往往要对所执行的任务做一定的调度。调度主要分为静态调度和动态负载平衡两种。静态调度主要是通过预先划分任务,减小节点间的通信开销,以达到提升系统性能的作用;而动态的负载平衡则是充分利用运行时节点与节点的通信,交互必要的系统信息,以提高整个系统的吞吐量。
对于静态调度,通常在程序编译阶段预测程序的执行时间与通信延时,并将小的任务汇集为较粗粒度(coarser-grain)的任务。这种调度主要分为完全优化(optimal)和部分优化(suboptimal)两大类。其中完全优化方案一般属于NP问题,只有当给定某些限制时才能进行完全优化的求解。由于完全优化方案的复杂性问题,大部分研究工作都是集中在部分优化方案上,即求得一个“较优”解(或可以接受的解)。部分优化方案的求解主要由近似式(approximate)和启发式(Heuristic)两种方法构成,其中包括模拟退火、线性或非线性规划、状态空间搜索等技术。不过它也存在很多缺点,如缺乏对任务执行和通信延时的有效预测,忽略对异地数据存取时带来的通信延时。
为了弥补这些缺点,目前对高性能计算机的执行时间预测器(execution time estimation)的研究广泛开展,如对用户预测、模拟预测和基于Profile预测的研究。
负载平衡技术在编译阶段不需要知道程序在运行时的任何信息,相反,它主要依靠系统运行时各处理节点的信息做出相应的决策。负载平衡将任务以动态启发式的方式在处理节点间分布,以达到减小总的执行时间、最大化系统吞吐量或最大化系统利用率等为目标。负载平衡强调适量的信息在节点间的有效通信,主要分为静态(static)和自适应(adaptive)两大类。通常认为随机放置(Random)和节点轮询(Round Robin)策略属于典型的静态负载平衡。而自适应性负载平衡通过集中的或分布式的通信,使用一个或多个阈值(threshold),即在系统参数到达阈值前后使用不同的策略。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-26149-6.html
这次国家必须要做坚决的回应
美的情报了得
发挥了正能量