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/