<分区>
比如说,我有一台假设的机器:Hypothetical Von-Neumann .
图像是这样说的:
- 缓存为 1 kB,获取 1 个 float (8 字节)的成本为 1 个 CPU 周期。
- 如果代码所需的数据不在缓存中,则以 150 个 CPU 周期为代价从 RAM(10MB) 中取出 1kB 数据。
现在,给定这台机器。我想知道计算代码片段的 CPU 周期成本的细节/规则。作为示例,请使用此代码,其中 A
是一个 1024x1024 int
矩阵并且已使用整数初始化:
#define N 1024
sum=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
sum+=A[i][j];
}
- 我该如何计算编号。获取矩阵 A 的数据所需的 CPU 周期数?我是
对于矩阵
A
将如何从主内存中获取感到困惑。我不是在寻找确切的答案,只是想知道解决问题的过程。我不完全确定代码如何使用各种内存。
例如,当i = 0
和j = 0
时(第一次迭代),A 将从主内存调用,对吗?那么这是否意味着 1 kB 的数据从主内存传输到高速缓存或仅 4 字节,因为该元素只是一个整数?指令或操作的内存又如何呢?只是对这个感到困惑。
- 如果我用上面的
A[j][i]
替换A[i][j]
会怎么样? - 此外,如果用 FORTRAN 编写完全相同的代码,会有什么不同?
编辑:我只想知道如何计算仅获取矩阵 A 数据的 CPU 周期。