基于分析的MATLAB循环分析与转换框架
1. 区域划分与重要范围确定
在进行MATLAB循环分析时,会选择大小为100、1000、10000和100000的区域,每个区域会进一步细分为10个子区域。若子区域内观察值的数量超过用户设定的阈值(实验中使用的阈值为30%),则该子区域被视为重要区域。当确定一个重要区域后,该区域内的最大观察值会被添加到重要范围列表中。
2. 依赖分析
在这一阶段,MCFLAT会计算循环体中所有语句相对于该循环所有预测重要范围之间的依赖关系。它会维护各种支持依赖分析的数据结构,这些信息将在后续的循环转换阶段使用。数据依赖测试问题是确定嵌套循环中对同一数组的两次引用是否可能引用该数组的同一元素。由于通过分析确定了循环的上界,因此选择了非常简单且高效的依赖测试方法:Banerjee的扩展最大公约数(GCD)测试和单变量约束测试。目前,这些测试对于小型基准测试已足够,但可根据需要轻松添加更多测试。
3. 循环转换
在该框架中,程序员可以通过可选的循环注释来建议需要应用的转换类型,或者系统会自动确定并应用对循环合法的转换或转换组合。MCFLAT实现了以下对并行性和有效利用内存层次结构有用的循环转换:循环交换和循环反转。对于自动检测和应用上述循环转换,使用了单模转换模型。循环交换和反转被建模为基本矩阵转换,这些转换的组合可以简单地表示为基本转换矩阵的乘积。如果转换后的距离向量按字典顺序为正,则基本转换或复合转换被认为是合法的。除了自动测试循环交换和反转的合法性外,该框架还支持用户指定的更多转换。程序员只需在循环体中注释需要应用的转换类型,框架会检查注释的存在,若存在则使用预测的循环边界计算依赖信息,并在循环语句之间没