我已启用自动矢量化。当我编译的代码,我收到以下警告:C++矩阵乘法自动矢量化
info C5002: loop not vectorized due to reason '1203'
MSDN指定该
环体包括非连续存取到一个数组。
这里是我的源代码:
for (int row = 0; row < size; ++row) {
for (int col = 0; col < size; ++col) {
float tmp = 0;
for (int i = 0; i < size; ++i) { // This loop generates the warning above
tmp += matrixA[row][i] * matrixB[i][col];
}
matrixResult[row][col] = tmp;
}
}
任何帮助是值得欢迎的。
C++二维数组作为一维数组row1,row2等排列在内存中。此表达式'matrixB [i] [col]'使索引在数组中跳转。这个表达式'matrixA [row] [i]'没有。 –
你的矩阵是如何定义/分配的?如果他们是'double **',那么由于缓存局部性问题,您的性能也会变差。 – NoseKnowsAll
首先转置B(并交换索引),以便获得连续的访问权限。 –