为了尽可能地保证比赛的公平公正,所以所有参赛队伍的比赛都会有各自的局域,用半透明的玻璃窗隔开,外面可以看到里面,但是里面看不到外面,这也是为了方便裁判的监督。
和开发有关的事情,都必须在各自队伍的局域里完成,而且比赛期间,参赛队员不能和其他队伍互相交流,也不能请外援。
开发大厅内,键盘敲击声此起彼伏,迁徙者的比赛局域内,这次获得线下赛资格的,一共十支队伍。
在十支队伍里,有一支叫做星火的团队,编号07,团队一共四个人,张昊是队长,架构师,王琦是cuda优化方面的专家,赵敏负责性能分析,刘博负责底层指令与调试。
虽然在线赛的时候,他们的成绩并不算多好,但那不是因为他们的技术不行,而是经过阅读比赛规则之后,他们就猜到了后续可能还会有下一阶段的比赛,毕竟没有什么奖金这么多的比赛会仅仅用在线赛决出胜负的,所以他们做出了一个大胆的决定:利用在线赛的宝贵时间和实战环境,全力熟悉和深入aetos生态。
因此在整个在线赛期间,他们都在抓紧时间熟悉aetos生态,对于这种新的东西,越了解它,之后的胜算就多一份,张昊系统地研究了aetos的软件架构白皮书,着重理解其设计理念与cuda的根本区别。
王琦则是将大量精力投入研究aetos提供的计算原语、内核编写规范,并尝试用aetos的方式重写了一些经典的cuda算法,亲身感受两种范式的差异。
赵敏早早地就开始摸索aetos平台上的性能剖析工具链,对比其与nvidia
nsight系列工具的异同,学习如何在这个新平台上快速定位性能热点。
刘博专注于aetos的编译器fgs、调试接口以及与其他国产软硬件环境的兼容性问题,为线下可能遇到的各种意外情况做准备。
就是有点类似于考研时候的408,对于很多基础性的开发场景,408的用处可能不大,但是随着技术的深入,就能越来越体现出基础的重要性,同理,aetos也是如此,越了解其基础,才能在遇到各种问题的时候解决起来游刃有馀。
而比赛的第一天,他们之前的准备工作就已经体现出来了极大的优势。
当同赛道其他队伍还在思考没有共享内存,nufft的优化该从何入手,并且反复查阅cuda文档试图找到替代方案的时候,星火团队的隔间里,王琦已经在白板上画出了一个全新的计算流图,他一边画一边向张昊解释,“昊哥,按我们之前的分析,aetos的统一内存虽然无法手动控制,但如果我们把每个非均匀数据点及其影响的网格局域定义为一个计算包”,利用它的aetos—task—cha原语显式声明依赖,或许能天然规避掉那些不规则访问带来的延迟。”
张昊凝视着白板上逐渐成型的计算流图,手指点了点:“思路上倒是没什么问题,不过我担心的是,如果我们把每一个非均匀数据点都作为一个独立的计算包”起点,这会产生海量的初始任务,aetos运行时虽然号称支持极细粒度并行,但其任务调度器本身存在固定开销,当任务数量远超内核数量时,调度开销可能会淹没实际的计算时间。”
这就有点象是,如果全国十四亿人都参军,那战前点名可能都得好几天的时间。
随后他转头看向一旁正在敲键盘的赵敏:“赵敏,在线赛后期,我们针对不规则稀疏矩阵矢量乘设计的那套动态任务聚合”启发式算法,它的参数调优和模型验证完成了吗?”
“已经基于在线赛收集的多种负载模式完成了校准,根据脱机仿真和在线小规模测试的数据,在nufft这类问题中,通过合理的聚合阈值控制,我们有信心将任务调度开销从可能超过70的灾难性水平,压制到总耗时的15以内,不仅降低了调度器压力,更重要的是,复合任务内部更容易形成连续的内存访问模式,从而更好地利用aetos统一内存架构中的缓存层次。”
动态任务聚合设计的内核思想是根据任务间的数据局部性,具体来说,是判断不同计算包”所访问的均匀网格局域的重叠程度来动态地将多个细粒度任务捆绑成一个粒度更大的复合任务。
一旁正在查阅编辑器文档的刘博抬头:“还有一个点需要注意,编译器对aetos—task—cha的嵌套深度和复杂度是有限制的,如果我们在一个任务链内部声明了过于复杂的依赖关系,超过某个阈值后,编译器会出于保守策略,放弃深度优化,甚至可能将其降级为效率较低的顺序执行模式,王琦你在设计任务链拓扑时,需要避免出现这种复杂度爆炸”的节点。”
王琦点点头,这一点他之前倒是没有想到,不过这也证明了团队参赛的好处,一个人无论再严谨,除非象是周昀那种开挂的,否则都会有疏漏,这时候队友的作用就体现出来了,几个人的头脑风暴,很多时候就足以应对大多数情况了。
他想了一会儿,拿起笔:“明白了,那我们可以采用一种分层递归的策略,第一层,我们先用一个轻量级的分区”任务,根据非均匀数据点的空间分布,将它们粗略地划分到不同的逻辑块中,这个层级的任务数量会很少,然后,第二层,在每个逻辑块内部,再独立构建一个更细粒度的任务链,来处理块内数据点的具体插值计算,这样,既避免了单条任务链深度过深触发编译器限制,又通过分区实现了数据局部性,整个结构也更清淅,便于我们后续分块优化和调试。”
几人一听,觉得这个思路挺好,张昊作为队长点了点头:“可以,那咱们就按照这个思路来。”
“明白!”其他三人应声点头。
而在星火团队已经有了具体方案的时候,其他队伍甚至还在调试aetos的编译器,因为这次的任务光是准备工作就比他们在线赛时候做的东西难上不止一个等级。
这时候就体现出了基础的重要性,不止是星火团队,三个赛道进度最快的几个队伍,除了极个别的队伍,这些团队基本都有一个共同特点,就是在线赛的排名不高不低,都用那些时间来熟悉aetos的技术了。
五天的时间,在键盘的敲击声飞速流逝。
虽然有着在线赛的熟悉,但是对于大多数习惯了cuda舒适区的队伍而言,在新的生态里重新写一遍nufft还是有难度的。
但是对于像星火团队这样花费了大量时间在基础学习上的队伍,任务进度飞速,当其他一些队伍还在为某个诡异的编译错误耗费一整天时,星火团队可能已经在刘博的经验指引下快速绕过,最终,在经历了无数次微调后,星火团队的性能曲线艰难但持续地向上爬升。在截止前,他们的nufft迁移版本,在保证数学正确性的前提下,性能达到了一个足以让他们在【迁徙者】赛道中稳居前列的数值。
五天期限一到,所有开发环境被强制锁定。”
“有几个警告没来得及处理,希望不会影响评分。”。下一阶段如果是全新领域,就没这么轻松了,都别松懈。”
“总算提交上去了,老天爷,我最后一天只睡了三个小时,感觉心脏都要跳出来了,能不被淘汰就是胜利————”
“基础太差了,在线赛光想着冲排名,没好好看aetos的文档。”
“那个内存泄漏,要是早一天发现,我们也不至于性能差那么多。”
对每个人来说,这五天的经历都是不一样的。
就象是考试一样,对于差生来说是折磨,对成绩好的学生来说,解题是享受,不过要说最难受的还是那些有能力但是却因为时间原因不能答完题目的学生。
但这也是没办法的事情,效率”也是比赛参考的重要因素之一。
选手们低语,被隔绝在各自的玻璃隔间内,成为了破壁者营地第一阶段最真实的尾声,他们只希望,不要在之后的淘汰名单中看到自己的名字就好。
短暂的等待后,所有参赛者再次被召集到主会场,舞台上方的大屏幕已经亮起。
执行秘书长手持最终结果,直接切入主题。
“经过技术评审委员会严格的自动化测试与专家评审,第一阶段破壁者营地”各赛道积分排名现已确定,积分由任务完成度、性能提升幅度、代码对aetos特性运用深度、代码稳健性及架构创新性等多个维度综合评定。”
2星火团队—积分:890(性能:078tflops,)
7探路者团队—积分:520(性能:041tflops,————)
8北极光团队—积分:485(性能:049tflops,)
星火团队隔间附近,王琦的眼睛瞬间瞪大了:“他们不也才是在线赛中游吗,怎么突然这么猛了?
”
张昊笑了笑:“看来也不是只有我们在隐藏实力,毕竟是世界级的比赛,卧虎藏龙不也很正常吗?”
“说的也是,不过这样一来,咱们夺冠的难度不是变大了吗?”
而第六、第七位的队伍成员看到自己队伍名字的时候则是露出了庆幸的表情,好在是没被淘汰。
不过被淘汰的队伍成员,脸色就不太好了,毕竟一轮游这种事情,听上去就不太光彩。
除了【迁徙者】赛道,【超越者】、【造梦者】赛道的排名也相继公布,同样各有两支队伍被标记为淘汰。
2智擎—积分:885
7探索者—积分:535
8算法先锋—积分:490
【造梦者】赛道最终排名:
1灵风团队—积分:930
2独行者dsb—积分:905
7思维边界—积分:540
8未来构想—积分:475
“以上,即为第一阶段最终结果。恭喜所有晋级的团队,你们证明了自身的实力与潜力,同时,我们也感谢所有参赛者的努力与付出,包括即将离开营地的队伍,破壁之旅虽止于此,但技术的探索永无止境。”
虽然淘汰的队伍不能继续参加比赛了,但他们也会收到来自组委会的安慰奖,毕竟能够参加线下赛的,技术能力都是绝对过关的,这都是重要的人才资源,这才是举办这次比赛最为重要的原因。
秘书长扫了眼台下继续说道:“根据比赛规则,第一阶段积分将按一定比例计入最终总成绩,这意味着,你们目前的排名,将直接影响你们争夺最终奖金池的起跑位置!
但正如我们一直强调的,在这里,没有一劳永逸,第一阶段的表现已成定局,第二阶段,将是全新的挑战,积分权重更高,暂时的领先者,若稍有松懈,便会被后来者超越;暂时的落后者也绝非没有机会,只要你能在下一阶段实现更大的突破!”
“后天上午九点,第二阶段任务将在此公布,现在各位有一天的时间休息。”毕竟连续一周的脑力劳动,消耗肯定不小。
裁判组,周的几人正在讨论第二阶段任务的选题。
题目其实早就出了几个,现在讨论的不过就是选哪个的问题,而且除了讨论选题之外,还有一件事情,那就是关于李维团队身份的问题,如果仔细观察就会发现,他们队伍的积分和第二名的差距极大,这是其他几个赛道都没有的情况,这其实是周昀的提议,在他敏锐的观察下发现,李维团队对于cuda的理解已经超越了一般的开发者,他们就象是真正参与过cuda的原始开发一样,这一点从他们的代码上就能看的出来。
所以,他非常怀疑,这个李维的背后很有可能就是英伟达,不过没有证据,而且人家确实做的好,自然就给了个很高的分数。
不过对于这种情况,他们还是得好好讨论讨论该怎么办。