高速计算(HPC)到底快!快在哪里?显卡计算更优于中央处理器?

作者:港云互联 时间:2018-10-11
    上次有人问了一个很有趣的问题:“计算化学是否有考虑使用GPU计算”,让我想到这一篇文章的主题.高速计算(HPC)到底快!快在哪里?一般高速计算的电脑机房都长成这样,上面每一长条状的东西都是一台电脑,每个柜子上都插满电脑,简单来说,超级电脑就是将一堆小电脑组成一台大电脑,一种组合金刚的概念。所以超级电脑为什么快,就是因为每一个工作可以让多台电脑分工合作,试想一个状况100个人清理一学校礼堂,就是比一个人清理还快.所以一般来说超级电脑一般就是要来解决一台或两三台电脑无法解决的问题,就像清理“礼堂”这种大场地一样.有问题、有人后接下来我们要思考的是:挑选队友以及如何分工。

GPU服务器
GPU和CPU


    每一台电脑,基本上都有这两个东西,CPU(Center Processing Unit)负责作业系统以及软体的运作,GPU(Graphic Processing Unit)负责萤幕绘图,看到颜色与图像.这两个元件都可以拿来计算,但它们天生设计的目的导致完全不同工作型态. GPU是针对图像处理的元件,所以它的特色就是“大量计算”,“不断的重复计算”.但CPU是针对“一般化工作”所设计的元件,所以他可以处理档案读写,或是各种应用程式.这两个差异就像一个国英数只有数学考100分的学生,国英都只考20分和一个叁科目都可以考70分的学生。专业的来说就是SIMD(single instruction,multiple data)和MIMD(multiple instruction,multiple data)GPU是SIMD的设计,CPU则是MIMD的设计.SIMD的运作模式就像划龙舟,龙舟头有一个人发号司令,剩下的人就拼命滑水,MIMD则像是踢足球时,每个球员都有自己的任务分工。所以CPU一般来说会处理较复杂的工作,而GPU是单一工作。


超级电脑如何分工?


    在超级电脑这个领域,IBM是元老级的公司,所以fortran这语言到现在在计算领域中还这么活越的塬因就与IBM有关。在传统计算用服务器,都是用CPU来跑,像我们实验室的规格就是8核心24台刀锋服务器(ibm blade server),这样的计算能力只能拿来做模型评估测试用,然后再转移到国加高速运算中心,利用御风者(台湾最快的高速电脑)来做计算。乍听之下觉得很奇怪,”计算”就是一个”算”字,应该大量使用GPU阿!为什么都是以CPU为主。我先介绍两个基本平行模型:多核计算与分布式计算。一般来说我们的电脑一个工作只会有一个CPU来执行,但对于计算量很大像从1累加到1千万,来说剩余的CPU没有用到很可惜,所以发明了一种可以让很多CPU一起动起来的方法,这是一种叫shared memory(分享內存)的架构,让所以有CPU都可以参与这个”累加”的工作,假设有一个4核新的电脑,代码会把1到1千万分成四等份,然后分配给四个核心,各自累加完后再全部加起来,理论上就是单1 CPU所工做的4倍快。分布式计算就把电脑像电池串再一起,增加的性能。电脑与电脑之间的任务分配就靠一种叫InfiniBand的标准来互相工通,这种架构称为分布式计算(distributed computing)就像一个班长分配所有人班级打扫区域,散开后各自分工。那如果把分布式计算和多核心计算合并是否就会更快,可以彻底发挥整群电脑的计算能力。这就是目前常使用的方法,一般称为复合式计算(hybrid computing),所以这就是超级电脑快的秘密,说穿了就是把一个很大的问题,拆成许多小问题后让每个计算单位处理完后再合并,组成最后答案。


GPU计算是一个趋势


    不一定!塬因是一开始所介绍的CPU和GPU功能上的差异,GPU固然很会算,但它协同工作能力很差,就我毕业时的状况,GPU服务器间是无法沟通的,所以一个工作只能丢给一个GPU服务器去工作。所以真对单一台服务器的比较,GPU完胜CPU服务器,但真对过度复杂的模拟工作,CPU cluster机器组的能力还是优于GPU服务器。计算学家和电脑科学家,也正在尝试的将GPU的工作性能结合在CPU cluster机器组上,目前的运作方式就是看每台机器可以插几张显示卡,由CPU负责沟通与资源分配,然后让GPU来计算。目前来说这个方向是一个趋势,但它的门槛也是相对的高,不论在代码上还是经验上。


如果你想要接触平行化计算,以下是我的建议:


    代码请学:C/C++、OpenMP、OpenMPI、CUDA

新人注册,即送价值满880元现金劵

立即注册>>
客服 电话 反馈 活动 回顶部

服务热线

+852-5764-9835

1对1贴心服务,7X24小时热线