Mih*_*nca 5 c c++ arrays performance caching
我有一个int名为的矩阵A,当我通过列而不是行迭代它时,它运行速度大约50毫秒:
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cout<<A[j][i]; //slower than of A[i][j]
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?我问了几个人,但他们都不知道为什么.我确定这与地址在计算机内存中的表示方式有关,但我仍然希望找到更具体的答案.
由于缓存内存,逐行迭代矩阵更快.
访问时A[i][j],缓存中加载的内存多于一个元素.请注意,矩阵的每一行都存储在连续的内存块中,因此当内存"around" A[i][j]仍然在缓存中时,更有可能访问同一行中的下一个元素将导致从缓存而不是主内存中读取它(参见缓存未命中).
另请参阅相关问题:
为什么在迭代2D数组时,循环的顺序会影响性能?
这两个for循环中的哪一个在时间和缓存性能方面更有效率
缓存内存如何工作?
矩阵乘法:矩阵大小差异小,时序差异大
| 归档时间: |
|
| 查看次数: |
710 次 |
| 最近记录: |