OpenMP任务的任务调度点

时间:2014-04-11 12:10:48

标签: c performance parallel-processing openmp

我有以下代码:

#pragma omp parallel
{
    #pragma omp single
    {
        for(node* p = head; p; p = p->next)
        {
            preprocess(p);

            #pragma omp task
            process(p);
        }
    }
}

我想知道线程什么时候开始计算任务。只要使用#pragma omp任务创建任务,或者仅在创建所有任务后创建任务?

编辑:

int* array = (int*)malloc...
#pragma omp parallel
{
    #pragma omp single
    {
        while(...){
            preprocess(array);

            #pragma omp task firstprivate(array)
            process(array);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在您的示例中,工作线程可以在创建任务后立即开始执行它们。在执行第一个任务之前,不需要等待完成所有任务的创建。

因此,基本上,在生产者创建第一个任务之后,一个工作人员会将其拾起并开始执行任务。但是,请注意OpenMP运行时和编译器在此方面具有一定的自由度。他们可能会稍微延迟执行,甚至执行一些任务。

如果您想了解详细信息,您需要浏览www.openmp.org上的OpenMP规范。它有点难以阅读,但它是最权威的信息来源。

干杯,         -Michael