我想同时运行两个绝对不同的功能。 我试过这个来检查它是否有效:
#pragma omp parallel
{
#pragma omp single nowait
{
#pragma omp task
{
for (unsigned long long i=0; i<numSteps; i++)
sum1 = sum1 + 4.0/(1.+ (i + .5)*step*(i + .5)*step);
}
#pragma omp task
{
for (unsigned long long i=0; i<numSteps; i++)
sum2 = sum2 + 4.0/(1.+ (i + .5)*step*(i + .5)*step);
}
#pragma omp taskwait
}
}
只有一个周期,它以10秒结束并加载我的cpu超过100%。
我希望在两个不同的内核上同时运行2个周期,它以24秒结束并加载cpu超过200%,但我预计接近10秒。
没有#pragma omp single nowait
它会在138s结束计算并加载我的cpu超过400%。
我做错了什么?