openmp部分按顺序运行

时间:2010-06-01 21:44:05

标签: c parallel-processing openmp

我有以下代码:

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

根据Zoom profiler,创建了两个线程,一个线程执行两个部分,另一个线程只是阻塞!

以前有人遇到过这样的事吗? (是的,我确实有双核机器。)

2 个答案:

答案 0 :(得分:2)

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

或者,如果您刚刚创建了一个简单的应用程序来尝试验证线程,该怎么办?

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

也许看看它是否有效?

答案 1 :(得分:0)

不,我不能说我之前遇到过这样的事情。我遇到过OpenMP代码的各种问题。

我的代码段无法立即看到任何错误。使用缩放分析器时,它会影响程序的执行。您是否检查过,在分析器之外,程序在不同的线程上运行这些部分?如果你有更多的部分,它们都运行在同一个线程上,还是在不同的线程上运行?如果您只有两个部分,请在测试时添加一些虚拟部分。