基于数据依赖图的模板应用优化
1. 传统平铺方法的局限性
传统的平铺方法是从一组固定的转换中寻找最佳的平铺技术。例如,它们会找到能在源代码上产生最佳结果的仿射变换。一些平铺技术会对提供的源代码应用一组转换,并在转换后的程序中搜索最佳的局部性。这种方法过去曾取得成功,但它受到搜索空间的限制,因为搜索空间本质上受限于从初始源代码生成的程序。
2. 问题的提出
我们关注的核心问题是:“通过使用片上内存,哪种平铺策略最能有效减少片外带宽?”不过,并非在所有情况下都能找到该平铺问题的解决方案,因为解决该问题需要了解应用程序的完整依赖图,而这对于某些应用来说在实际或理论上可能是不可能的。
本文聚焦于在并行处理器上运行的模板应用的最优平铺问题。在这种情况下,该优化问题是可解的,原因如下:
- 程序中的计算与输入数据无关。
- 可以对程序中的所有计算进行计数。
- 可以构建一个数据依赖图,以提供程序中计算之间的关系。
3. 并行模板计算的最优平铺
对于并行模板计算,并行意味着当一个瓦片的内存加载完成后,就可以完全计算该瓦片,无需与片外内存或其他处理器进行通信。以下是一个一维FDTD的内核代码示例:
for t in 0 to NT-1
for i in 1 to N-1
E[i] = k1*E[i] + k2 * ( H[i] - H[i-1] )
end for
for i in 1 to N-1
H[i]+=E[i]-E[i+1]
end for
en