广义数据转换:优化嵌入式应用的数据缓存行为
1. 引言
在嵌入式应用中,尤其是那些涉及大量数组操作的图像和视频处理应用,数据缓存的性能至关重要。冲突缺失(conflict misses)是导致数据缓存性能下降的主要原因之一。研究表明,在许多嵌入式应用中,冲突缺失占总缓存缺失的比例高达42.2%,甚至在某些应用中超过50%。为了应对这一挑战,本文提出了一种基于编译器的数据转换策略——广义数据转换(Generalized Data Transformations),旨在减少嵌入式应用中的数组间冲突缺失,从而提高性能并减少能量消耗。
2. 广义数据转换的理论
2.1 动机
传统的数据转换方法通常只针对单个数组进行优化,而在嵌入式应用中,多个数组常常在同一嵌套循环中被访问。例如,考虑以下循环嵌套:
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
k += A[i][j] + B[i][j];
}
}
在这个例子中,数组 A 和 B 的引用都表现出完美的空间局部性,但如果它们的基地址恰好映射到同一缓存行,则可能导致100%的冲突缺失率。广义数据转换通过将这些数组映射到同一个数组索引空间(数据空间)来避免这种情况。应用广义数据转换后,给定的循环迭代会访问转换后的数组中的两个连续元素,从而显著降低冲突缺失的可能性。
2.2 理论基础
广义数据转换的核心思
超级会员免费看
订阅专栏 解锁全文
603

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



