我有以下代码,基本上是下三角矩阵的正向替换。
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
但是挂墙时间增加了。有没有一种方法可以很好地使这种代码和平感得以实现?
先谢谢了。 最好的问候。
答案 0 :(得分:1)
如评论中所述,性能不佳是由于内部循环中调用了较小的并行区域所致。重新编写代码以将并行化用于外循环时,性能会随着线程数量的增加而提高。