为什么这种矩阵乘法算法比其他算法快?

时间:2019-03-16 22:18:17

标签: c

int mmult_omp(double *c,
           double *a, int aRows, int aCols,
           double *b, int bRows, int bCols, int numThreads)
{
  for (i = 0; i < aRows; i++) {
for (j = 0; j < bCols; j++) {
  c[i*bCols + j] = 0;
}
for (k = 0; k < aCols; k++) {
  for (j = 0; j < bCols; j++) {
                c[i*bCols + j] += a[i*aCols + k] * b[k*bCols + j];
  }
}

}

for (i = 0; i < aRows; i++) {
    for (j = 0; j < bCols; j++) {
    c[i*bCols + j] = 0;
    for (k = 0; k < aCols; k++) {
    c[i*bCols + j] += a[i*aCols + k] *  b[k*bCols + j];
  }
}

}

为什么第一种算法比第二种算法快? 我使用了C的时间库,客观上第一种算法要比第二种算法快。为什么会这样?

1 个答案:

答案 0 :(得分:-1)

此代码很难理解。我必须将其复制并重新格式化以查看循环是什么。我不太确定为什么会更快,但是这里有很多资源来说明为什么。

以下是检查程序集输出的链接:

link for #1
link for #2