组件优化组合的自适应离线调优
1. 混合组合示例
以矩阵 - 矩阵乘法为例,有两种实现变体:著名的顺序版本和使用固定 4 个线程的 pthreads 并行版本。
- 离线训练阶段 :每个上下文实例执行一次来测量性能数据。
- 动态选择的组合代码执行时 :每个上下文实例平均运行 10 次来计算性能。
使用的硬件是具有 16 个 CPU 的多核系统,每个 CPU 是运行在 2.27GHz 且具有 8192KB 缓存的 Intel(R) Xeon(R) CPU E5520,操作系统为 Linux 3.0 - ARCH,编译器是 gcc 4.6.1。
由于资源(这里是 OpenMP 的线程数)固定,上下文实例是一个三元组,由定义操作数矩阵维度的三个问题大小组成。训练空间选择为 [1 : 1000, 1 : 1000, 1 : 1000] ,包含 10⁹ 个可能的上下文实例(输入大小)。使用八叉树作为树数据结构,同时沿三个维度对 subspace 进行细化,树的截断深度设置为 3。
设置完成后,离线训练时间(即包括在目标系统上进行测量的树构建时间)为 228 秒,构建的树有 41 个节点,自适应树细化主要针对问题大小较小的 subspace。通过将运行时的组合代码与每个上下文的实际最快组件进行比较(见相关图),发现树查找的动态选择精度为 92%,且执行动态选择的开销可以忽略不计。
2. 选择过程
2.1 初始化
读取训练阶段生成的调度树文件,并添加一个翻译表,将每个实现变体的符号
超级会员免费看
订阅专栏 解锁全文
177万+

被折叠的 条评论
为什么被折叠?



