C++ 如何确定循环是否使用;任务“;是并行的吗?

C++ 如何确定循环是否使用;任务“;是并行的吗?,c++,parallel-processing,openmp,C++,Parallel Processing,Openmp,我对openmp完全陌生,并学习如何使用任务并行化循环。我做了如下循环: #pragma omp parallel default(none) firstprivate(left) private(i) shared(length, pivot, data) { #pragma omp for for(i = 1; i<length-1; i++) { #pragma omp task { if

我对openmp完全陌生,并学习如何使用
任务
并行化循环。我做了如下循环:

#pragma omp parallel default(none) firstprivate(left) private(i) shared(length, pivot, data)
    {
#pragma omp for
        for(i = 1; i<length-1; i++)
        {
#pragma omp task
            {
                if(data[left] > pivot)
                {
                    i = length;
                }
                else
                {
                    left = i;
                }
            }
        }
#pragma omp taskwait
    }
#pragma omp并行默认值(无)firstprivate(左)private(i)共享(长度、轴、数据)
{
#pragma omp for
对于(i=1;i轴)
{
i=长度;
}
其他的
{
左=i;
}
}
}
#pragma omp taskwait
}

我不确定它是否正确地并行化,因为它需要比预期的更多的时间。如何改进代码?

在这种情况下,任务指令完全不相关,因为(#pragma omp for)完成了这项工作


任务用于无界循环。

循环体编译成10条机器指令。创建、排队和执行OpenMP任务的成本要高出几个数量级。你现在能发现问题吗?@HristoIliev那么,你有什么建议?这段代码是可并行的吗?在这种情况下,无论如何都应该使用
#pragma omp parallel for
,因为这个pragma就是为此而设计的。