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

C++ 在内部循环中使用OpenMP时性能不佳,c++,parallel-processing,openmp,C++,Parallel Processing,Openmp,我有下面的代码,它基本上是下三角矩阵的正向替换 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()->o

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

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];
}
for(int i=0;isize()-1;++i)
{
双和=0.0;
#pragma omp并行化简(+:求和)
对于(int j=matrix.get_rowptr()->运算符[](i);j运算符[](i);++j)
{
sum+=矩阵。get_value()->运算符[](j)*结果[矩阵。get_columnindex()->运算符[](j)];
}
结果[i]=总和;
结果[i]=vector1[i]-result[i];
}
第一个循环遍历行,第二个循环遍历列。内部循环中的平均操作数为minium 100。 我尝试使用OpenMP通过简单地添加
#pragma omp parallel for
但是墙的时间增加了。有没有一种方法可以很好地并行化这种代码和平

提前谢谢。
致以最诚挚的问候。

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

对不起。我已经添加了代码行。更多细节:循环做了多少工作?你是如何计算死刑执行时间的?你有什么硬件资源?外循环大约执行50000次,内循环每个外循环至少执行100次。在调用调用循环的函数之前和之后,我使用高分辨率时钟测量了时间。硬件是Intel Xeon E5-2640。通常情况下,您会希望它反过来,您不希望多次调用并行区域,并且希望它们尽可能长,100是一个很小的数字,如果只使用一个线程,可能会更快,因为并行化的开销可能比简单地让一个线程来做要花费更多的时间。另一方面,如何定义
get_rowptr
get_columnindex
呢?好的,我理解。我会设法找到另一种方法。函数get_rowptr和get_columnindex返回std向量上的指针。