选手感言

PAC 参赛记——中国科学技术大学鸿雁优化队

浏览次数:1257 发布时间:2019-06-21 03:06:07

1

其实我第一次听说 PAC 比赛的时候尚在 2016 年, 那时正在德国参加 ISC 2016 的大学生超算比赛. 而队伍的学生教练正巧是 PAC 2015 优化组的冠军选手 RZY. 他安利我参加 16 下半年的 PAC 优化比赛, 说要比 ISC 有意思的多, 也更加有挑战性. 可是那年 ISC 的成绩非常不理想, 打破了 USTC 参加 SCC 从未跌出前三的记录, 难免令人灰心丧气. 私下觉得自己水平不太能担起卫冕 PAC 的任务, 于是婉言拒绝了他.

我本科的专业是天体物理, 对计算机虽然感兴趣, 但终究只是一知半解. 也非常感谢并行科技和 Intel 的几位老师, 来科大办过几次讲座, 让我对 CPU 的底层架构有更多认知. 两年间我半自学半旁听补上了一些计算机基础, 所以当我听说 PAC 2018 报名开始的时候, 心中踌躇满志, 两年磨剑, 霜刃未试.

2

我是最后一个加入队伍的. 本来队里已经有四个人, 正巧其中一只鸽子飞走了, 我也就乘虚而入. 剩下三人里 HJY 和我原本相识, 是中国科学技术大学 Linux 用户协会 (科大 LUG) 的会长, 也是校内知名大佬. 其他两位同学都才大一, 看我已经有种廉颇老矣的眼神, 着实令我伤心.

曾经问起他们三个人是如何在一起的, 他们说开会开多了也就认识了. 这一点我表示赞同, 在组成队伍之后, 我们也相约开过几次会, 讨论了一下比赛的策略, 于是都熟悉了其他人的 QQ 头像. 后来一起点了几次外卖, 加上了支付宝好友, 感觉我们之间的友谊又得到了升华.

3

比赛前并行科技甚至提供了在线的 Web Seminar, 给我们培训了一下 Intel Omni-Path 的相关内容. 只是有些过于深奥, 自感获益有限, 但的确开阔了眼界. 后来比赛时也试图针对 Omni-Path 对通信进行优化, 发现工作量太大只好放弃.

初赛分为笔试和优化, 笔试部分我们临时抱佛脚把陈国良院士的那套并行计算又供了出来. 只是没想到题目中竟有许多和神威有关的编程问题. 幸而实验室有几位师兄在神威上做研究工作, 平时我耳濡目染, 如今勉强应付的来. 优化部分是 Fortran 语言的共轭梯度 PCG 求解, 我们参照论文, 做的只有一知半解. 第一次接触大规模的 Fortran 代码, 方知编程语言之不易, 心中对 Brian Kernighan 和 Dennis Ritchie 无限感激. 对于 Fortran 的种种特性, 比如前几列留空, 注释与数组下标, 深恶痛绝之情此处且按下不表.

数月过后, 我去参加位于 Las Vegas 的 DEFCON 26 CTF, 恰与初赛截止日期冲突, 得以暂脱 Fortran 之泥潭, 故主要优化工作皆由其他三位同学完成. 最后听闻初赛成绩尚可, 此非在下之功, 不敢掠人之美也.

4

优化比赛的运行环境位于中国科技云· 超算云平台, 似乎是中国科学院网络中心维护, 但也可以通过并行科技的客户端登录. 我们只使用了最简单的功能诸如文件传输与 SSH, 但似乎还有许多科学计算软件可以使用, 只是与此次比赛无关. 网页模拟的终端对键盘快捷键支持良好, 延迟较低, 虽然上传下载速度偏慢, 总体而言用户体验颇佳.

实际上主要优化工作在学校的机器上完成, 毕竟云平台上并没有图形化的 Intel Vtune 和 Paratune 等工具. 我们的指导老师安虹教授为我们准备了数个双路 Intel Platinum 8150 的节点, 互连采用 InfiniBand EDR. 然而由于 CPU 与互连网络和云平台不同, 使得应用特征稍有改变. 我们在一些参数上做了简单的估算和修正, 再通过多次实验也应该能够弥补这一影响.

5

进入复赛实属意料之中, 不过由于对冠军有所渴望, 听闻这个消息心中还是颇为激动. 复赛题目有两道, 一道依旧是 Fortran 语言的 POM, 和一道 MATLAB 下运行的 SOBI. 虽然没有看到千盼万盼的 C 语言, 碰到 MATLAB 代码还是颇为欣慰的. 我们最开始采用了密码学安全的伪随机数发生器 (CSPRNG) 的方式进行任务分配, 试图解决 Fortran 语言产生的内部矛盾, 但以失败告终. 后来我们决定采用类似于 GPU 的 SIMT 模式, 四个人同时对一份代码进行优化, 集思广益. 现在回想起来, SOBI 最核心的三个优化之一, 就是我们在图书馆的一间房间里几个人一起讨论出来的.

最开始的几个月慢慢悠悠, 基本没有明显进展, 以至于到了 9 月底, 才发现时间无多. 于是国庆 7 天紧急赶工, 平均三天半完成一个应用的优化. 国庆最后一天我独自在寝室通宵, 把 SOBI 从 7 秒多提升到 3 秒左右, 感觉已经几乎做无可做方才上床休息. 如今回想起来, 也是热血沸腾.

具体的优化内容已经写在 PPT 里, 这里也就不再详述. POM 我们有幸能够咨询清华大学地球系统科学系的黄小猛教授, 他曾获得 2016 年 Gordon Bell 奖提名. 在其帮助下, 我们深入理解了 POM 这个应用. 他也为我们指出了一些大致优化的方向. 在此我们深表感谢. 可惜由于时间原因, 很多优化未能成功实现, 实为此次参赛中一大憾事.

SOBI 题目中的 MATLAB 代码有一个微小的错误, 将虚数单位  和循环下标混为一谈, 不过由于虚数部分数值过小, 故而对结果正确性影响甚微. 我们研究许多论文以及软件包源码后, 采用了另一种等价的计算方法绕过了这一错误, 且避免了复杂的特征值计算. 其次我们对矩阵进行重排 (并非转置), 对数组的访问模式有所优化. 最后我们还解决了 OpenMP 的访问冲突, 去除了核心计算中的一个 Barrier. 最后才能达到上百倍的优化. 实际上最后听闻山东大学的优化结果后, 仍然心有余悸. 如果我们中途稍稍有所自满而放弃任何一个优化, 最后必然只能屈居第二.

6

比赛是在青岛举办. 青岛是一个非常有趣的城市. 下火车步行不到百米, 就已然出站. 出站时大致 21 点, 广场上罕有行人, 寒风已入深秋. 四方寂寥, 月半星稀, 路边霜叶零落. 欧式风格的建筑上爬满树影, 和上海外滩相似却没有都市的喧嚣繁华. 这才想起青岛曾是德国租界, 德国虽然对胶东的统治只持续了 17 年, 但是造成的影响却持续到 100 多年后的今天. 我们找了一家麦当劳匆匆吃完晚饭之后, 便搭上出租前往比赛会场附近的酒店.

第二天我们前往会场, 完成注册之后就开始参观会场. 大致确认了比赛区域之后, 就回酒店做准备了. 路上在一家韩式小店里买了几瓶崂山白花蛇草水, 在酒店里一边在云平台上测试运行, 一边小口尝着这青岛特产.

第三天醒的很早, 来到比赛区域占了一个位置, 然后就等比赛开始了. 中途虽然云平台有些意外, 不过我们的程序运行的结果倒也正常, 算是顺风顺水的跑出来了预期结果. 我们测了几次选择了最高的一个数值确认提交了. 此时比赛还没结束, 正巧 SOBI 的出题人, 也是香港大学 Nfe 实验室的 Director Prof. Akaysha Tang, 和我们聊起来 SOBI 这个程序. 当她问起来我们的优化结果时, 我们当时还笑着回答保密但是肯定能有惊喜. 她当即祝我们取得好成绩, 结果果然拿了金奖. 后来她还邀请我们去香港大学访问, 向我们介绍了实验室做的一些工作, 不过这都是后话了.

最后一天参加晚宴的时候颇为紧张. 安老师还问我们自我感觉成绩如何, 我们心里还比较忐忑, 所以回答道一般. 后来才知道这时候安老师应该已经知道结果了. 颁奖等了很久才到优化组, 当我们听到我们不在铜奖里的时候心里的确放下来一颗大石头. 但是当听到宣布银奖里也没我们的时候, 我们又纷纷紧张起来. 等到宣布金奖是我们的时候, 我直接把筷子夹住的红烧肉塞进嘴里, 然后发出糊弄不清的欢呼声. 这时候我就感觉, 这么多天的努力, 终于取得比赛的认可了. 那天晚上回去我睡得很死, 因为这几天太累了. 其他三位队友睡前精力倒还不错, 玩到凌晨还相约早起去沙滩看日出, 也不知鸽了几个.

 

上一条:PAC专辑一|三分之一的梦想 下一条:最后一页