繁体   English   中英

在内部循环中使用OpenMP时性能不佳

[英]Poor performance when using OpenMP in inner loop

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

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添加为来使内循环#pragma omp parallel for但是增加了挂墙时间。 有没有一种方法可以以良好的方式使这种代码和平感得以实现?

提前致谢。 最好的祝福。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM