写在ASC2014决赛之前

今天是4月12日。

我从2月16号来到学校,2月17号面试,然后一直要搞到4月27号。足足两个月的时间,这段时间收获的东西不少,需要批判的地方也不少。不敢说自己真的做了多少优化,至少装配计算集群环境以及安装应用和调试参数这些流程都略知一二了。没有学习太多的并行程序做法。我也认清了自己的学习模式,我不喜欢捡碎片的学习法,我比较适合体系式的学习,把一切都串在一起,有好处也有坏处。总之,先上图再说吧:

一个计算节点中的内存阵列:

内存

节点的布局:

A node

Tesla-K40m:

Tesla K40m

Xeon-phi:

Xeon Phi

然后我就很长一段时间忙乎SU^2:

可以说很长一段时间都在调节参数,甚至至今我都不明白SU^2在搞什么飞机(事实上他就是搞飞机的XD)。比如下面这个飞机的机翼空气动力模拟。至于他具体是怎么回事我没刻意去弄明白,也没这个必要。

Xeon Phi

附上网格边界的效果:

Xeon Phi

一个剖面的模拟:

Xeon Phi

2D平面的模拟:

Xeon Phi

最近ASC这边终于压力开始陡增了,我稍微有点受不了了。预赛时的论文写的我很痛苦,非常的痛苦。所以本来以为如果进了决赛不会很乏味的。现在看来是我想多了。各方面的压力都很大,尤其今年是东道主,所以副校长给了我们一定的指示,至少不能让如此大笔的投资换回来一个很惨淡的结果就是了。

当然如果我自己能够看淡结果,置身于细枝末节之外就很好了。希望通过这个比赛得到一定的历练。我曾经有想过打ASC究竟让我得到了什么?难道就是那一点点很业余的算法?亦或是微不足道的一点小成就?有比这更重要的东西,我获得的是很重要的灵魂,很宝贵的思想。

同时,我收获的更多的应当是一种超脱。对比ACM和ASC,如果说ACM获得的是硬功夫,那么ASC更多的是一种软实力。超算是一个坑很大,而且不容易量化的东西,至少比ACM难量化。所谓ASC的坑,指的就是你不得不花很大的精力放在一些必要的细枝末节上去,这些细枝末节直接影响着你的最终优化成果。打ACM/OI所锻炼出来的那些东西完全可以应用在ASC上。而且ASC上也能获得更多其他的宝贵的东西。

在知识方面,比如硬件,作为一个学生你很少有机会能够碰到集群,GPU/MIC加速卡。甚至是真正的超级计算机,比如这届比赛我们会用到天河二号。同时也能让你更深入的了解并发计算,OpenMP/MPI/OpenACC等等。而且你还非常有必要深入学习Linux的基本操作。

跟ACM不同的是,ACM比较类似“养兵千日,用兵一时”。ASC的整个过程都是在竞赛,虽然两者对于最终结果的看重程度是一致的。不过ASC在比赛的准备过程中更加枯燥。ACM是有标准答案的,ASC没有,而且优化是无止境的。这就造成了如果没有经验很容易无头苍蝇乱撞。走错了方向不但白白努力不说,还完全没有成果。

这对于选手的考验更大。毕竟这就像搞科研一样,要耐得住寂寞。有意思的事情是:当你真的把一切都准备好的时候,一切都顺利跑起来以后,那才是有意思。然而现在来看,革命尚未成功,同志仍需努力。