OpenMP 2.0将链表节点分发到多个线程

时间:2017-04-26 13:13:10

标签: c++ multithreading visual-studio-2010 openmp

我必须使用支持OpenMP 2.0的VS 2010我有一个大的单链表,我想使用OpenMP为线程团队分配节点处理。我发现了一些关于使用单线程进行迭代然后将每个节点的副本分配给团队中每个线程成员的文章:

#pragma omp parallel
{
    #pragma omp single default(none)
    {
        element *p = listHead;
        while( p != NULL )
        {
            #pragma omp task private(p)
            Process( p );

            p = p->next;
        }
    }
}

这里'单身'指令指定一个线程应该进行迭代和内部 - 指令' private'指定每个线程接收' p'的副本。变量并进行处理。虽然我需要别的东西。我想将不同的节点分发给线程。例如,如果我的列表包含10个节点并且我设置为使用4个线程,我希望第一个线程接收3个节点,第二个3个节点,第三个2个节点和第四个2个节点。这只是近似假设。基本上我希望每个线程都有不同的节点。我当时正在考虑使用' single'或者'主人'指定一个线程应该通过列表执行迭代的指令,但我不知道如何指定此节点分布。有什么想法吗?

更新:并不是没有重复,因为@Zulan建议原因All OpenMP Tasks running on the same thread的答案不能在VS2010中使用。 '任务' VS2010部署的OpenMP 2.0不支持指令。

0 个答案:

没有答案