我在 C++ 中使用大型矩阵(8192x8192)的内在函数编写了一个矩阵-矩阵(32 位浮点数)乘法函数,每次读写操作的最小数据大小为 32B。
我会将算法更改为阻塞算法,以便它将一个 8x8 块读入 8 个 YMM 寄存器,并对目标块行(另一个 YMM 寄存器作为目标)进行乘法运算,最后将 8 个结果累积到另一个寄存器并存储到内存中。
问题:从非连续地址获取 32B 块是否重要?如果它看起来像这样,它是否会极大地改变性能:
Read 32B from p, compute, read 32B from p+8192 (this is next row of block), compute,
Read and compute until all 8 rows are done, write 32B to target matrix row p3
代替
Read 32B from p, compute, read 32B from p+32, compute, read 32B from p+64......
我的意思是内存的读取速度,而不是缓存。
注意:我使用的是 fx8150,我不知道它是否可以在一次操作中读取超过 32B。