有两个NN的矩阵A和B,想要在PC上按矩阵乘法基本算法编程实现计算AB。假设N较大,本机内存也很大,可以存下A、B和结果矩阵。那么,为了计算速度,A和B在内存中应该如何存储(按行存指先存储第一行,再第二行,直到最后一行;按列存指先存储第一列,再第二列,直到最后一列)?
A按行存,B按行存。
A按行存,B按列存。
A按列存,B按行存。
A按列存,B按列存。
乘法是A的行乘B的列,读取顺序是一次读取A的一行和B的一列,那就是A按行存,B按列存。
这样的话缓存命中更高。
可以参考:
https://software.intel.com/zh-cn/articles/superscalar-programming-101-matrix-multiply-part-2
我觉得,根据AxB,应该是A按照行存储,B按照列存储,这个跟矩阵向量计算有关.
A按行存,B按行存。
自己思考的,可能不对。
循环取A第l行 {
初始化临时n * n矩阵
按顺序循环取此行第a个数{
与B中第a行相乘得到一个临时n * 1矩阵,存放到临时矩阵第a行
}
对临时矩阵求列和得到一个 n * 1矩阵存放到结果矩阵第l行
}
可以用结果矩阵当临时矩阵。