我遇到的每个算法总是使用方阵来平铺矩阵乘法。当两个矩阵的大小完全不同时,是否可以平铺MMM?
这是我目前正在使用的代码,我想尝试添加平铺以提高我的性能。
#pragma omp parallel shared(x, R, r, row) private(i, j, k, temp)
{
#pragma omp for
for (k = 0; k < x->n; k++){
for (i = row; i < row+2; i++){
temp = x->v[i*x->n+k];
for (j = 0; j < R->n; j++){
r[i*R->n+j] += temp*R->v[k*R->n+j];
}
}
}
}
变量x,R和r是矩阵结构,其中m,n和v被定义为保存大小和数据。矩阵x是一个旋转矩阵,因此它是一个带有两行数据的单位矩阵。这就是为什么我只将乘法限制为两行。
Matrix x的大小为2xn,R的大小为mxn。注意:已定义x的n始终为R的m,因此没有大小不匹配。
是否可以平铺这种不匹配的矩阵乘法并仍能获得性能提升?