0

我有以下代码:

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

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

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

4

2 回答 2

2

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

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

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

也许看看这是否有效?

于 2010-06-03T20:33:44.823 回答
0

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

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

于 2010-06-02T05:18:48.717 回答