CPU集GPU集异构集分布式
—–集与分布式区别
—–集
—–集分类
—–CPU 集
—–异构集
—–异构集简单搭建—
—–– 天河⼀号–
—–– 编程语⾔–
简单说,分布式是以缩短单个任务的执⾏时间来提升效率的,⽽集则是通过提⾼单位时间内执⾏的任务数来提升效率。
例如:
如果⼀个任务由10个⼦任务组成,每个⼦任务单独执⾏需1⼩时,则在⼀台服务器上执⾏改任务需10⼩时。
采⽤分布式⽅案,提供10台服务器,每台服务器只负责处理⼀个⼦任务,不考虑⼦任务间的依赖关系,执⾏完这个任务只需⼀个⼩时。(这种⼯作模式的⼀个典型代表就是Hadoop的Map/Reduce分布式计算模型)
⽽采⽤集⽅案,同样提供10台服务器,每台服务器都能独⽴处理这个任务。假设有10个任务同时到达,10个服务器将同时⼯作,10⼩后,10个任务同时完成,这样,整⾝来看,还是1⼩时内完成⼀个任务!
——集——–
1.两⼤特性:
可扩展性
⾼可⽤性
2.两⼤能⼒
负载均衡
错误恢复
3.两⼤技术
集地址
内部通信
—-集分类—
linux集三类:
Linux High Availability ⾼可⽤集
(普通两节点双机热备,多节点HA集,RAC, shared, share-nothing集等)
Linux Load Balance 负载均衡集
(LVS等….)
Linux High Performance Computing ⾼性能科学计算集
(Beowulf 类集….)
分布式存储
其他类linux集
(如Openmosix, rendering farm 等..)
1. ⾼可⽤集(High Availability Cluster)
常见的就是2个节点做成的HA集,有很多通俗的不科学的名称,⽐如”双机热备”, “双机互备”, “双机”.
⾼可⽤集解决的是保障⽤户的应⽤程序持续对外提供服务的能⼒。 (请注意⾼可⽤集既不是⽤来保护业务数据的,保护的是⽤户的业务程序对外不间断提供服务,把因软件/硬件/⼈为造成的故障对业务的影响降低到最⼩程度)。
1. 负载均衡集(Load Balance Cluster)
负载均衡系统:集中所有的节点都处于活动状态,它们分摊系统的⼯作负载。⼀般Web服务器集、
数据库集和应⽤服务器集都属于这种类型。
负载均衡集⼀般⽤于相应⽹络请求的⽹页服务器,数据库服务器。这种集可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这⼀点上看,负载均衡和容错集很接近,不同之处是数量上更多。
1. 科学计算集(High Performance Computing Cluster)
⾼性能计算(High Perfermance Computing)集,简称HPC集。这类集致⼒于提供单个计算机所不能提供的强⼤的计算能⼒。
⾼性能计算分类 :⾼吞吐计算、分布计算
 ⾼吞吐计算(High-throughput Computing)
  有⼀类⾼性能计算,可以把它分成若⼲可以并⾏的⼦任务,⽽且各个⼦任务彼此间没有什么关联。象在家搜寻外星⼈( SETI@HOME – Search for Extraterrestrial Intelligence at Home )就是这⼀类型应⽤。这⼀项⽬是利⽤Internet上的闲置的计算资源来搜寻外星⼈。SETI项⽬的服务器将⼀组数据和数据模式发给Internet上 参加SETI的计算节点,计算节点在给定的数据上⽤给定的模式进⾏搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的 数据。因为这种类型应⽤
的⼀个共同特征是在海量数据上搜索某些模式,所以把这类计算称为⾼吞吐计算。所谓的Internet计算都属于这⼀类。按照 Flynn的分类,⾼吞吐计算属于
SIMD(Single Instruction/Multiple Data)的范畴。
分布计算(Distributed Computing)
  另⼀类计算刚好和⾼吞吐计算相反,它们虽然可以给分成若⼲并⾏的⼦任务,但是⼦任务间联系很紧密,需要⼤量的数据交换。按照Flynn的分类,分布式的⾼性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。
—CPU 集——
并⾏:MPI
MPI+CUDA
ref 《基于CPU/GPU 集的编程研究》(深圳 星云 )
MPI负责进程间数据传输,CUDA 负责GPU计算程序设计,MPI和CUDA都是基于C语⾔,所以它们可以兼容的写到⼀个c⽂件⾥OpenCL (Open Computing Language) 是业界第⼀个跨平台的异构编程框架
openmp+MPI
纯MPI性能⽐纯openmp和MPI+openmp混合都要好很多,只是内存占⽤会⼤⼀些。原因是集普遍是NUMA节点,节点内的data locality对于openmp是⼀个⼤问题。⽽MPI编程模型天⽣强制⽐较好的data locality。当然openmp结合affinity设置也能写出来locality好的程序,但是普遍的说法是,如果你想⽤openmp写出MPI的性
能,那你的openmp代码肯定长得像MPI代码。具体做法就是把mpi的通信,⽤openmp数据复制替代,还不如直接⽤MPI得了,⾄少可以扩展到分布式。还有⼀个做法就是每个numa单元⼀个MPI进程,numa单元内部⽤openmp。这样需要⽐较复杂的cpu binding设置,但是是可以部分解决locality问题的
openmp+MPI混合编程在MPI基础上加⼤了复杂度,采⽤它的⽬的,是减少内存占⽤,⽽⾮提⾼性能。即使是在单个节点,纯粹的共享内存系统,MPI程序在性能上也不输openmp,⼤多数时候甚⾄更好
这些异构计算资源和基于它们的不同层次的并⾏计算能⼒,给并⾏程序设计带来困难
——–天河⼀号————–
“天河⼀号”采⽤CPU和GPU相结合的异构融合计算体系结构,硬件系统主要由计算处理系统、互连通信系统、输⼊输出系统、监控诊断系统与基础架构系统组成,软件系统主要由操作系统、编译系统、并⾏
程序开发环境与科学计算可视化系统组成。总体技术指标如下: (1)峰值速度4700TFlops,持续速度2566TFlops(LINPACK实测值),内存总容量262TB,存储总容量2PB。
(2)计算处理系统:包含7168个计算结点和1024个服务结点。每个计算结点包含2路英特尔CPU和⼀路英伟达GPU,每个服务结点包含2路飞腾CPU。全系统共计23552个微处理器,其中英特尔⾄强X5670 CPU(2.93GHz、6核)14336个、飞腾-1000
hadoop分布式集搭建CPU(1.0GHz、8核)2048个、英伟达M2050 GPU(1.15GHz、14核/448个CUDA核)7168个,CPU核共计102400个,GPU核共计100352个。
(3)互连通信系统:采⽤⾃主设计的⾼阶路由芯⽚NRC和⾼速⽹络接⼝芯⽚NIC,实现光电混合的胖树结构⾼阶路由⽹络,链路双向带宽160Gbps,延迟1.57us。
(4)输⼊输出系统:采⽤Lustre全局分布共享并⾏I/O结构,6个元数据管理结点,128个对象存储结点,总容量2PB。
(5)监控诊断系统:采⽤分布式集中管理结构,实现系统实时安全监测、控制和调试诊断。
(6)基础架构系统:采⽤⾼密度双⾯对插组装结构,冷冻⽔空调密闭风冷散热。环境温度10℃~35℃,湿度10%~90%。
(7)操作系统:64位麒麟Linux,⾯向⾼性能并⾏计算优化,⽀持能耗管理、⾼性能虚拟计算域等,可⼴泛⽀持第三⽅应⽤软件。
(8)编译系统:⽀持C、C++、Fortran77/90/95、Java语⾔,⽀持OpenMP、MPI并⾏编程,⽀持异构协同编程框架,⾼效发挥CPU 和GPU的协同计算能⼒
——编程语⾔———
1)如果你只需要在Windows平台上进⾏异构编程,并且看重易编程性的话,C++ AMP⽆疑是最好的选择。依托于Visual Studio这个强有⼒的开发⼯具,再加上基于C++这⼀更⾼层抽象带来的先天优势,C++ AMP将为Windows开发者进⾏异构编程提供良好的⽀持。
2)如果你只需要在Nvidia的GPU卡上进⾏异构编程,并且⾮常看重性能的话,CUDA应该是第⼀选择:在Nvidia的强⼒⽀持下,CUDA在Nvidia硬件上的性能⼀直保持领先,许多学术研究表明OpenCL与CUDA的性能相差不⼤,在⼀部分应⽤中CUDA的性能稍微好于OpenCL。同时CUDA的开发环境也⾮常成熟,拥有众多扩展函数库⽀持。
3)如果你更注重不同平台间的可移植性,OpenCL可能是⽬前最好的选择。作为第⼀个异构计算的开放标准,OpenCL已经得到了包括Intel,AMD,Nvidia,IBM,Oracle,ARM,Apple,Redhat等众多软硬
件⼚商的⼤⼒⽀持。当然,C++ AMP本⾝也是⼀个开放的标准,只是⽬前只有微软⾃⼰做了实现,将来C++ AMP的跨平台⽀持能做到什么程度还是⼀个未知数。
其实从编程语⾔的发展来看,易编程性往往⽐性能更加重要。从Java和.Net的流⾏,到脚本语⾔的崛起,编程效率⽆疑是最重要的指标。更不⽤说开发者往往可以通过更换下⼀代GPU硬件来获得更好的性能。从这点来看,C++ AMP通过降低异构编程的编程难度,实际上也是推进了异构编程的普及。下⾯我们需要看的就是C++ AMP是否能成为真正的业界标准,⽽不仅仅局限于微软⾃⼰的平台,微软这次开放C++ AMP标准的⾏为也正是为了推⼴C++ AMP在业界的普及。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。