2020年11月6日,AdC2020的第6天,发布了一首名为《Prometeus》的超级计算机诗歌
您好,我是山田。
)、どうやって詩を書けばいいんでしょうね?でも、頑張ります!
第六天擎天神
因此,我們今天要介紹的是位於波蘭的超級電腦Prometeus系統的文章。
Prometeus是什么?
Prometeus是在波兰的AGH科学技术大学的计算机中心Cyfronet安装的。
根据2020年11月的排名,它排名第324位。该机器的理论峰值性能为2.3PFlops。
以下是新闻稿链接:http://www.cyfronet.krakow.pl/aktualnosci/18006,3,komunikat,prometheus_na_326__miejscu_listy_top500_-_najszybszych_superkomputerow_swiata.html
顺便说一句,因为是波兰语,所以真的不知道写了什么。
Prometeus的规格
我决定通过刚才的新闻发布、Top500网站和AGH科技大学网站来解读。
根据Top500网站上的数据,使用了HPE Apollo 8000产品的系统,其CPU使用的是Xeon E5-2680v3,GPU是NVIDIA K40。
节点之间的互联采用了Infiniband FDR技术,该技术是目前的前一代,具有56Gbps的传输速度。
由于Prometeus系统于2015年11月成型,所以从5年前的系统来看,这是一种合理的配置。
不过,根据我看到cyfronet的新闻稿,很可能K40并没有在HPL中使用。
由于Prometeus被分成了以下的分区,据记录所述。
• 具有高性能的英特尔韩山桥和英特尔黄金处理器的经典计算服务器,
• 一套装有NVIDIA K40 XL图形处理器的服务器,
• 一个加速分区,配有NVIDIA K80 GPGPU卡和英特尔韩山桥以及Nallatech FPGA加速器,
• 一个专门用于人工智能计算的分区,配备了GPGPU NVIDIA Tesla V100图形卡。
尽管这是由谷歌翻译准确地翻译成英语的。
多分是使用了Haswell世代的Xeon系统进行测量。也就是说是E5-2680v3。
使用的节点数量、CPU数量等等
硬件由2200台惠普Apollo 8000平台的服务器组成。科学家和研究人员可以使用超过5.3万个英特尔至强处理器的内核。
“Prometheus, the most powerful supercomputer in Poland, has emerged with a new appearance.” (Translated to Chinese: 波兰最强大的超级计算机Prometheus展现了全新的面貌。)
根据记载,之所以有这样的说明是因为,2200节点,E5-2680v3具有12个核心,因此在双插槽上运算是匹配的。此外,关于理论峰值性能,假设E5-2680v3的理论峰值性能为480GFlops,那么4400 * 480 = 2.1PFlops,计算大致相符。(虽然有百分之十左右的误差,但是…也许这是因为额外加入了144张K40卡的峰值性能的缘故吧…
因此,Prometeus系统本身就是基于这种仅限于Xeon CPU的集群哦!!(什、什么!?)
嗯,该怎么办呢…我本来想要讨论K40,但现在说Haswell话题也有点晚了…
好了,算了吧…还是说K40吧!!
好!!虽然是没有使用的话题,但我会说K40的!!!(这样可以吗?)
英伟达 K40
是的,这是NVIDIA K40。
NVIDIA的HPC产品,Tesla的第三和第四代。最近你有听到过Tesla这个词吗?
作为主流微架构的更新,Kepler架构带来了强大的HPC改进,其前身是G80和Fermi。
最近的CUDA已停止对Fermi架构的支持,但这是一个非常好的架构。等等,Fermi是在2009年公开信息的吗?嗯…十年真的过得很快…
Fermi架构在性能上非常优秀,但在良率改进和热量方面遇到了一些困难。GF100系列在出货时有两个SM即64个CUDA Core被禁用,并且依然在被称为非常发热。真的很辛苦。然后过了一段时间,良率有所提高,推出了全规格的GF11x,我就一直在使用它。在大学时期,摧毁了多少张GTX580啊…
虽然完全没有关系,但如果要买显卡的话,ELSA是一个不错的选择。价格高,但有三年保修!即使计算时损坏,他们也会乐意修好,真的非常抱歉。我真的很认错。
Kepler的架构是在Fermi架构的基础上经过反省后取得的显著进步的良好架构。虽然一开始对于微架构的大幅变化有些紧张。
以下是Keper架构的白皮书链接。顺便一提,还有日文版本哦。
费米->开普勒
Fermi架构的GF1xx是由TSMC制造的40纳米工艺的GPU。然而,Kepler架构的GK11x系列是由TSMC制造的28纳米工艺。(过去时)
GF110的芯片大小为520平方毫米,并实现了512个CUDA核心。而在GK110中,对于561平方毫米的芯片,实现了2880个CUDA核心。尽管工艺规则已经进步,然而面积增加了约8%,而核心数量并没有增加到5倍,这并不寻常啊…
一般来说,仅考虑晶体管,(40 * 40) / (28 * 28) 倍的密度是可以被实现的,因此可以将核心数量提高2倍,但如果没有微架构的改进,核心数量将无法进一步倍增。
因此,NVIDIA对微架构进行了重大变更。
我所做的是大幅简化控制逻辑。简而言之,就是指“如果指令有数据输入,在一定时间内就能完成,那么是否还需要花费精力进行排序呢?”为了简化这个问题,我们在编译时将指令的依赖性和延迟等信息嵌入到二进制文件中,使得硬件能够始终执行可以执行的指令。这也是对SM结构进行了大幅的变更,虽然不确定是否完全为了这个目的。
在中国进行本地化改编 SMX
SM是CUDA的核心执行单元,即使在今天的Ampere架构中仍然存在,它将CUDA Core作为一个整体,类似于CPU中的核心。
Fermi架构的SM
在NVIDIA的GPU中,指令的派发单位被称为Warp,每个Warp由32个CUDA Core组成。在Fermi架构中,指令派发单位和核心数量是1:1的对应关系。
一方凯普勒架构的SM
我认为您可以一眼就看出它变得巨大了。CUDA Core的数量已经打包成了192个,是原来的6倍。名称也已更改为SMX。
不仅如此,与Fermi架构相比,SM周围的寄存器数量增加了一倍。
NVIDIA的GPU结构非常有趣,SM内有大量寄存器,并且它们在线程之间进行共享。当程序员编写程序时,确定了每个内核线程的寄存器数,并根据该数量确定能够同时驻留在SM内的线程块数量。这个同时驻留的数目非常重要。这在今天的Ampere架构中也是一样的。
翘曲洗牌
在后面的讨论中,关于Kepler架构中引入的新功能,内部Warp Shuffle指令是很有趣的。我认为,写CUDA代码的人在那个时期可能都喜欢它(笑)。当编写数据并行的代码时,会出现在正在进行计算的并行单元中重新排序数据顺序的情况。即使在编写SIMD时也会出现这样的情况,比如想要进行循环…
在这种情况下,Fermi架构时只能将数据写入Shared Memory。然而,将数据写入Shared Memory的代价相当高。如果可能的话,希望避免这种情况…根据人们的需求,Warp内Shuffle命令应运而生。
Warp是32个CUDA Core的单元,可以访问其他线程拥有的寄存器。图示如下:
这个确实很厉害呢…
对于熟悉SIMD的人(有吗?),如果能够进行1024位SIMD的任意排列或者在寄存器内进行左右旋转,我觉得你会觉得很实用吧(这是什么样的解释呀)。
只读缓存
我从Fermi架构时就开始使用了这个东西,当时称为Texture Cache,本来是用于图形的缓存,但也可以用于计算(说起来GPGPU本来就是这个目的呢…)。而且与Fermi架构时一样,只需在只读数据上加上const __restrict修饰符,编译器就会将其放入缓存,非常方便。由于SMX具有48KB相当大的空间,这个功能非常实用。
动态并行化 huà)
在Kepler中,真是太具有革新性了!!一度感到非常兴奋,但实际上我有些疑惑,这到底要在哪里使用呢……虽然并不是完全没有用途的,不过……
普通情况下,当GPU被启动时,在线程和线程块之间会出现负载不平衡的情况。通常,GPU被设计成为了处理线程的停滞和不平衡,它会给线程分配比实际核心数多的数量。然而,并不是所有情况下都能很好地隐藏这种情况,而且并行性较低的程序是否能运行在GPU上也是一个问题。
当有复杂的控制流并且某些部分具有相当大的并行性,但在并行化的部分的数据是比较零散的时,如果要将其运行在GPU上,就必须进行串行化处理,而串行化的代价也不容小视,所以将其运行在GPU上也没有太多的好处…大家有没有这样的经验呢(????
动态并行性被吹嘘为能够很好地解决这个问题,即在GPU的核函数内部再启动一个核函数。使用它,可以使用较少的线程来执行控制流,然后当并行性增加时,可以一次性启动GPU的大量线程。由于流程在GPU端,数据也在GPU端,因此无需复制数据,也无需进行串行化处理!太棒了!
Kepler架构实际的表现如何?
我写了一些Fermi架构转变的变化,实际上Kepler架构变得相当高级,感觉很厉害。
在Fermi架构时期,只需要简单地启动大约128个线程并将其分配给一个SM,就可以轻松获得良好的性能。但在Kepler架构中,情况就不一样了。首先,由于每个SM上有192个CUDA核心,128个线程明显不够用。此外,Warp scheduler在Fermi架构中是1:32的比例,而在Kepler架构中则变成了4:192,所以需要仔细考虑线程的分配,整个结构变得有些棘手。实际上,每个SM上的寄存器数量也减少了很多(从32:65536变成了192:65536)。
因此,我们只需简单地”因为这是一个具有并行性的东西,所以试着加上去”,然后根据CPU比例加速,就会感觉到架构的和平。如果要深入研究,就会陷入”寄存器不足…利用率不高…”的循环中…
然而,这是一个非常稳定且朝着好的方向不断改进的良好架构。NVIDIA借此取得了Maxwell和Pascal,并稳坐今天的地位…(?
总结
-
- ポーランドのスーパーコンピュータ Prometeusについて述べました。
-
- 大誤算でPrometeusはCPUクラスタでした。
-
- Prometeusにはあんま関係なかったのですが、NVIDIA K40の話をしました。関係なくてほんとすいません。ほとんど自己満足です。
- 12/7は@higucheese さんで、Oakforest-PACSのお話です。めっちゃ楽しみ!!!
难道大家都喜欢XeonPhi吗?(一头雾水)