新闻 图说CPC赛事通知新网直通车 新网会客厅

CPC故事丨北京大学“代码都队”

浏览次数:2553 发布时间:2020-10-15-12:10:00

我们是来自北京大学的代码都队。这次CPC比赛的经历对我们来说是一次难得的经历。神威太湖之光作为国产超算的巅峰之作,也作为国家重要科技成果,在70年国庆上被一再提及。去年在北京的70周年国庆成果展上,我就看到了神威的机架,也只是机架。从感性上说,这次比赛我们有机会用神威·太湖之光,机会还是挺难得。

初赛前无锡超算中心的老师们给我们讲解编程技术、解析赛题,让我们很快学会了在神威·太湖之光上编程的基本技术。这次的决赛赛题是一个在图上的并行加速方案。我以为决赛赛题会像以往一样,给一个明确的算例,然后分析热点,然后自己做任务划分、并行加速、访存优化。但实际情况是我们读懂题目都费了点劲。赛题的核心目标实际上是非常明确的,但是自己一开始对于问题的理解不够深入。图的拓扑特征、计算任务本身的特征都是可以利用的条件——但这些信息都只会来自自己的挖掘理解,并不会有人把它作为条件给你。其实仔细想想,很多科学理论大体也如此:你提出一个假设才是最具有价值的东西。

在比赛中,我们需要独立完成提出假设、理论推导、实验验证等过程。“书到用时方恨少”,是比赛过程中的重要感受。此前没有接触过非结构网格上的计算问题,论文的理论背景了解不够多,前人工作的具体实现细节与我们又有较大差别,迁移到SW26010芯片上也是个考验。在这个过程中,我们短时间内熟悉一个陌生领域的能力得到了锻炼提升。

动手写代码的环节是比赛最吸引我的地方。在编程的过程中,我深刻体会到造一台国产超算多么困难:除了芯片的设计生产要自己完成,指令集、编译器、操作系统要自己完成,这已经工作量浩大了。然后要真的让用户用得上、用得好,开发工具、调试工具、技术支持、论坛社区都是必不可少的。在这些方面,无锡超算中心的老师们给我们提供了很多的支持。

SW26010的从核只有64kB的局部存储空间,调试代码的过程实在是好好地给我恶补了“内存泄漏”这个概念。甚至申请的一个字节忘了释放都会导致:结果莫名出错、存储空间不足、访存地址未对齐、DMA参数错误——首先需要看懂报错信息,然后要思(cai)考(ce)并定位出错位置,然后掉坑无数次才明白原来又是内存泄漏。 

一开始代码进度很慢,主要原因是我们其实没有很好的对代码不同功能解耦设计的经验。最极端的操作当然就是一个函数从头到尾写完然后检查结果。如果我们这么干的话我可能这辈子都调试不好这个代码。而后面陆续把框架搭起来之后,就顺利了很多——至少往上搭功能时,根基是牢固的,不会有和其它功能复杂耦合的奇异bug。

刚学写程序的时候就听说过一个观点:“代码是写给人看的。”虽然和自然语言相去甚远,但是编程语言还是一个比较靠近人的东西。好的命名习惯、代码格式,并非所谓强迫症,而是对待工程的基本严谨态度。方案讨论设计的过程是为未来调试和打补丁省下了时间……

我们还感受到,并行编程困难的核心原因是,是写并行程序会不可避免的要求程序员理解硬件细节,否则你无法理解为错误的同步带来的不可预期的结果,无法理解在某些部分性能反常地差。体系结构的知识还是非常重要的。

比赛另一个让我们印象深刻的环节是参观神威太湖之光。神威·太湖之光的主板都是镂空的,嵌进的水管拿来给芯片降温。所以几万个核心只需要放在一个篮球场大小的机房里面就够了,主板堆叠密度很高。我们在新闻稿上见到的神威·太湖之光,大抵就是它“大脑”的全部了,并不是占地面积广阔的一大片超级计算机。但它的“血管”、“消化系统”和“骨骼”的复杂程度还是远超我想象。申威核心间有几个机箱里面是互联网络,处理不同主板间的高速网络通信;上下层分别还有供电系统和水冷系统,透过几块玻璃地板我们可以看到错综复杂的水泵,而可靠供电系统更是保证了紧急停电后30min的稳定运行。真是百闻不如一见。

经过这次比赛我们从技术、能力和眼界上都收获了不少。还是十分感谢无锡超算中心给我们提供的大力支持。

欢迎大家分享自己的参赛感想、故事、收获或想对CPC说的话,可以微信留言、私信或发送邮件至cpc@paratera.com和组委会取得联系。


版权所有 国产CPU并行应用挑战赛