[英]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.