gpt4 book ai didi

c++ - 在内循环中使用 OpenMP 时性能不佳

转载 作者:行者123 更新时间:2023-11-28 04:33:56 24 4
gpt4 key购买 nike

我有以下代码,它基本上是下三角矩阵的正向替换。

for (int i = 0; i < matrix.get_rowptr()->size() - 1; ++i)
{
double sum = 0.0;
#pragma omp parallel for reduction(+:sum)
for (int j = matrix.get_rowptr()->operator[](i); j < matrix.get_diagonal_index()->operator[](i); ++j)
{
sum += matrix.get_value()->operator[](j) * result[matrix.get_columnindex()->operator[](j)];
}
result[i] = sum;
result[i] = vector1[i] - result[i];
}

第一个循环遍历行,第二个循环遍历列。内循环中的平均操作数最少为 100。我尝试使用 OpenMP 通过简单地添加来并行化内部循环#pragma omp parallel for但是墙时间增加了。有没有办法很好地并行化这种和平的代码?

提前致谢。最好的问候。

最佳答案

如评论中所述,性能不佳是由于内部循环中的小并行区域调用所致。当重写代码以对外部循环使用并行化时,性能会随着线程数的增加而提高。

关于c++ - 在内循环中使用 OpenMP 时性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52065547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com