我有一个Fortran代码来测试我的计算机的Cache内存。该代码基本上比较了计算大小为N×N的3个矩阵A,B和C之和所需的时间。给出N作为输入,矩阵的所有元素都是1.0。
总和由列和行组成,以比较Gflops(请记住,在Fortran中,内存按列而不是按行加载矩阵,因此:A(1,1),A(2,1),A( 3,1)......)。
for循环重复几次,以计算总和的平均时间。总和存储在相同的矩阵A中,因此A=A+B+C
。
我的缓存内存的特征是:
hw.l3cachesize: 3145728
hw.l2cachesize: 262144
hw.l1dcachesize: 32768
hw.l1icachesize: 32768
hw.cachelinesize: 64
由于矩阵的元素是real * 8类型,我期望在超出缓存L1大小时发现Gflops减少。
实际上我也想知道我是否应该期望32 kB或64 kB的变化,因为L1i是32 kB而L1d也是32 kB。
为此,我假设以字节为单位存储在缓存中的大小为3*N*N*8
(每个元素3个矩阵和8个字节)。
当我查看结果时,我无法在Gflops中识别出此更改。