Yu Shiqi CPP project 3. (96/100 pts)
相对比较满意的一次 proj.
项目要求:实现快速矩阵乘法,并测试特定大小(
实际实现的优化包括:
- 朴素算法:分块指令集优化
- Strassen算法
- CUDA
代码报告见 report 文件夹下,阅读 pdf 以获得更好的阅读体验,另外此文件夹下也附上了画图用的简易程序,很丑但是能用。
如果你测试发现部分效率和报告对不上?嘘。。。报告个别数据填串了,尤其是朴素的8k
如果你想做得更好:
- 虽然朴素算法基本达到了 OpenBLAS 的100-110%,但是实际上只有 kernel 写的比较精细,分块方式、分块参数方面都有很大提升空间,可以阅读 OpenBLAS 或报告参考资料中 Goto 的论文,尝试不同的分块方式。
- 使用自行实现的多线程。该项目目前多线程依赖 OpenMP,效果比较一般,你可以自己实现一下试试。
- Strassen 就是一坨
- CUDA 部分缺少参照,你可以加入 cuBLAS 的对照。并且这部分我是在ddl前两三天做的,优化严重欠缺,你可以实现更好的优化。
- 我没来得及写 arm 设备,如果你手头也没有,可以试试你的手机。Android Studio 对内嵌 C 语言还是比较友好的,随便套个模板就可以发布一个 app 到手机上测试了。不过这部分我没做,所以不保证能成。
如果你们还是用这个服务器, 这是一些忠告:
- 测试越早越好!后面服务器上人挤人根本没法测,所以 CUDA 部分实际上少了很多数据。
- 如果有申必人长时间占用服务器,比如半小时乃至几小时,不要给他脸,直接找助教 kill 掉他。