【发布时间】:2021-09-07 09:04:22
【问题描述】:
所以我开始使用 OpenMP(多线程)来提高矩阵乘法的速度,并且我目睹了奇怪的事情:当我关闭 OpenMP 支持(在 Visual Studio 2019 中)我的嵌套-loop 完成速度提高了 2 倍。 所以我删除了“#pragma omp critical”来测试它是否会显着减慢进程并且 进程比以前快 4 倍(使用 OpenMP 支持 开)。
这是我的问题:“#pragma omp critical”在嵌套循环中重要吗?我不能跳过它吗?
#pragma omp parallel for collapse(3)
for (int i = 0; i < this->I; i++)
{
for (int j = 0; j < A.J; j++)
{
m.matrix[i][j] = 0;
for (int k = 0; k < A.I; k++)
{
#pragma omp critical
m.matrix[i][j] += this->matrix[i][k] * A.matrix[k][j];
}
}
}
【问题讨论】:
标签: c++ multithreading performance parallel-processing openmp