nested parallelism 问题
下面这段程序是摘取的源程序一部分 只是一个for循环,希望能够把sum-=A.Get(r,k)*A.Get(k,c);并行,这里用了内嵌循环 但是执行以后时间用的比单核运算花的时间多得多,虽然cpu使用率高达97%左右,请高手分析一下这是什么原因,另外类似这种循环用那种方法实现并行比较好呢
#pragma omp parallel
#pragma omp single
{
for(r=0;r<c;r++)
{
sum=A.Get(r,c);
if(r>0)
{
#pragma omp parallel for shared (sum)
for(k=0;k<r;k++)
{
#pragma omp atomic
sum-=A.Get(r,k)*A.Get(k,c);
}
A.Set(r,c,sum);
}
}
}