我们知道,计算机内存的结构是由逻辑运算单元(ALU)、寄存器(R)、一级缓存cache(L1)、二级缓存cache(L2)、主存(也就是普通内存)构成的。离ALU越近的存储单元速度越快,出于这个原因,计算机采用了一些策略,比如把最近需要处理的数据预载到缓存中,当出现一个缓存未命中时,再把需要的该数据和它相邻若干字节的数据重新装入缓存中。因此,对于多维数组的访问顺序不同也将导致程序的性能不同。
考虑一个实际例子:二维矩阵的乘法:
ijk模式:
//ijk循环模式的实现:
template<typename T>
void matrix_multiply_ijk(T** a,T** b,T ** c,int n) {
for (int i =