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的时间库,客观上第一种算法要比第二种算法快。这是为什么?

最佳答案

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

以下是检查装配输出的链接:

link for #1
link for #2

关于c - 为什么这种矩阵乘法算法比其他算法快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55202062/

10-12 21:51