【问题标题】:openmp sections running sequentially顺序运行的 openmp 部分
【发布时间】:2010-06-01 21:44:05
【问题描述】:

我有以下代码:

#pragma omp parallel sections private(x,y,cpsrcptr) firstprivate(srcptr) lastprivate(srcptr)
{
    #pragma omp section
    {
       //stuff
    }
    #pragma omp section
    {
       //stuff
    }
}

根据缩放分析器,创建了两个线程,一个线程执行两个部分,另一个线程只是阻塞!

有没有人遇到过这样的事情? (是的,我确实有一台双核机器)。

【问题讨论】:

    标签: c parallel-processing openmp


    【解决方案1】:

    我想我还不太了解分析器,但我遇到的一个问题是忘记使用 OpenMP 标志并启用支持。

    或者,如果您只是创建了一个简单的应用程序来尝试验证线程呢?

    #pragma omp parallel num_threads(2)
    {
    #pragma omp critical
        std::cout << "hello from thread: " << omp_get_thread_num() << "\n" << std::endl;
    }
    

    也许看看这是否有效?

    【讨论】:

    • +1 用于使用 num_threads(2) - 有时您实际上必须强制 OpenMP 使用多个线程,因为如果没有可用的处理器,它偶尔会决定序列化所有内容。我认为您可以使用 omp_get_max_threads() 来获取它将使用的最大数量,或者您可以询问您的系统它有多少 procs 并在 num_threads() 中使用该值。祝你好运!
    【解决方案2】:

    不,我不能说我以前遇到过类似的事情。不过,我在使用 OpenMP 代码时遇到了各种问题。

    我看不出你的代码 sn-p 有什么问题。当您使用缩放分析器时,它会影响程序的执行。您是否检查过,在探查器之外,程序在不同线程上运行这些部分?如果您有更多部分,它们是都在同一个线程上运行还是在不同的线程上运行?如果您只有两个部分,请在测试时添加一些虚拟部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2019-04-23
      • 1970-01-01
      • 2015-01-27
      • 2013-03-04
      • 1970-01-01
      • 2013-01-06
      相关资源
      最近更新 更多