第一届九坤并行程序优化大赛总结
原文链接背景
2021 年 9 月,量化头部公司九坤举办了其第一届并行程序优化大赛,相关介绍可参考推送。赛题如下:
赛题是 C/C++ 的 codebase,然而我与一起组队的两位同学基本都对 C/C++ 不太熟悉,于是我们起名叫做了"只会 JAVA 队"。作为三个在体系结构几乎一窍不通的小白,在一个多月断断续续的不到 10 次线下沟通中,我们逐渐对体系结构入了门,在 192 个队伍脱颖而出,并在决赛取得了第 4 名的成绩(PS:离苹果周边只差一步真的好可惜),具体可以参考总结推送。
这里简单做一总结,贴一些当前的资料和想法,以备之后回忆和反思。
赛题
第一题
在深度学习中,卷积操作在神经网络中扮演了重要的作用。2015 年,Andrew Lavin 等人提出了快速计算卷积的算法 Winograd,通过降低计算复杂度,相比直接卷积的算法提升 4 倍效率,成为了深度学习中非常重要的一个算法。本次比赛的第一题就是优化 Winograd 算法。各参赛队的通过优化比赛方给出的 Winograd 算法代码,缩短其运行时间,提升该算法时间的每秒浮点计算次数(FLOPS)。
第二题
金融数据是真正的“大数据”。每天市场上的交易会产生海量的数据,这些数据对于预测未来市场走势只非常重要。因此负责高速储存、读取这些数据的 IO 系统成为了行业内重要的一环。目前金融数据中常用 HDF5 文件系统库进行大规模的数据存储。本次比赛第二题要求各参赛队探索 HDF5 文件系统,通过一个跑分程序 h5bench 来完成 IO 系统的性能研究和调优。
代码 & 文档
从赛题可以看到,此两题能够检验选手最大化压榨 CPU 和 IO 性能的能力。
有关赛题的代码和文档均已开源,可移步 Github 查看。欢迎交流~
此外,在此处简单列举一下我们组在两个题目上的学习资料,希望能对大家有帮助。
第一题:
[*]SIMD 简介
[*]AVX / AVX2 指令编程
[*]为什么向量化计算会这么快?
[*]高性能深度学习的编译优化
[*]卷积神经网络中的 Winograd 快速卷积算法
[*]优化 CPU 矩阵乘法
[*]矩阵运算库在性能上区别大吗?
[*]NCNN
[*]FeatherCNN
[*]Optimization of Spatial Convolution in ConvNets on Intel KNL
[*]Winconv
[*]Fast Algorithms for Convolutional Neural Networks
[*]Sparse Winograd Convolutional neural networks on small-scale systolic arrays
[*]Perf
第二题:
[*]h5bench: HDF5 IO Kernel Suite for Exercising HPC IO Patterns
[*]On Implementing MPI-IO Portably and with High Performance
[*]h5bench
[*]hdf5
总结
就 CPU 题目而言,我们此次尝试了以下优化和工具:
[*]算法优化:winograd4x3-3D
[*]指令级并行:循环展开,分支预测
[*]数据级并行:AVX128,256,512
[*]线程级并行:OPENMP
[*]编译器:尝试 gcc 不同版本,对比 llvm
[*]内存排布:36*STRIDE
[*]冒险尝试:merge_array
[*]Profiling:perf
其实这里有好多思想都已经在数据库领域存在了。比如向量化引擎,比如 codegen 的 llvm 优化,比如对 cache 友好的 push 查询引擎等等。
个人认为,数据库做到极致便是对硬件性能的一种体现。因此,一个优秀的数据库工程师应该对体系结构具有一定的了解,这样才有可能进一步压榨硬件性能,从而达到更好的数据库性能。
一直以来,我希望分布式数据库能够成为自己的一个标签。通过这次比赛,我意识到高性能计算也是一个很有趣且硬核的方向,其不仅能够给企业迅速带来真金白银的收益(节约成本),而且也是很多领域做到极致的一种出路。
希望未来还能有契机去进一步深挖此方向吧。 作为比赛组织者看到这么认真的总结,给你点赞 感谢组织方[赞] [捂脸]这题不会是凯亮出的吧... 这个得奖了是不是可以进九坤工作呀? 俺只是入了个门,九坤的工程师都是 HPC 的大佬,俺不配[大哭] 哈哈不知是哪位大佬[惊喜] 哼~╯^╰
页:
[1]