1. 论文信息
- 文章来自ACM SIGPLAN Symposium on Principles & Practice of Parallel Programming, PPoPP, 2023
- Merchandiser: Data Placement on Heterogeneous Memory for Task-Parallel HPC Applications with Load-Balance Awareness
所有作者及单位
- Zhen Xie,University of California, Merced Argonne National Laboratory
- Jie Liu,University of California, Merced
- Jiajia Li,North Carolina State University
- Dong Li,University of California, Merced
2. Background
图1.a给出了一个基于MPI的任务并行应用的例子。在DMRG中,一个哈密顿矩阵首先被分割成多个块,每个块被分配给一个MPI 进程(1-3行) 。然后每个MPI进程运行一个计算循环,作为输入(第5-7行)循环的一次迭代被认为是1个任务实例。因此,MPI进程中的任务是重复执行的。在每个迭代结束时,有一个全局的MPI进程之间的同步。
图1.b给出了1个基于OpenMP的任务并行应用的例子,一个主循环运行了许多SpGEMM (C=A*B) 。在主循环的每一次迭代中,A首先被分割成若干个bins,部分 A*B 得到部分C
3. 解决了什么问题
异构内存让这种并行的,有同步点的workload负载均衡,这个策略算是对以前迁移策略的补充。
4. 其他学者解决这个问题的思路和缺陷
当大家都将访问频率高的页面放在DRAM时,忽略了并行计算有同步点的实际情况,这会使得高性能计算不同任务间负载不均。
5. 围绕该问题作者如何构建解决思路
Input-Aware Memory Access Quantification
既然是从任务的角度来解决问题,那么如何确定什么样的数据放入快速内存中?
一种是程序员自己去设置。
另一种分类是流式的、一定步长的,需要考虑左右两边数据的、随机的。一个程序还可以有多种模式同时存在。(这在16年eoursys有比较相似的工作)这些模式的识别是现有的开源工具改造的。
阿尔法的值,根据步长和数据类型来确定,由作者提前枚举好了的。综上给了两种方法来判断输入数据的将来被访问量,PM用的是一篇论文的方法,DRAM用的是另一篇论文(先大页面采样,热的再去采样那一块的小页面),以这次的访问预估下次访问频率。如果没有指定的情况就是随机那种模式。
迁移的决策模型应该是,作者的想法就是怎么把数据放置在不同PM的敏感性展现出来,区分出数据在不同异构放置的差别。
时间上的预测完全参考13年的一篇论文。输入的是各种硬件采样值和当前DRAM的访问量,然后有个相关性函数去做判断。
相关函数用的GRB(梯度提升回归):每个学习算法准确率都不高。但是它们集成起来可以获得很好的准确率。这些学习算法依次应用。也就是说每个学习算法都是在前一个学习算法的错误中学习。
性能模型的设计概述
上一个同步点前的任务被输入,在编译时判断访问模式和访问预测做静态分类。运行时根据以前大家做的采样以及机器学习的运行时间预测,达到迁移和负载均衡的目的。
6. 从结果看,作者如何有力证明他解决了问题
首先是性能提升。然后可以看到改进后执行时间方差减少了。
7. 缺陷和改进思路
解决方案太黑盒了吧。
8. 创新点
关注的问题的角度。
9. 积累
Spindle是清华写的,开源的。