我有以下代码:
#pragma omp parallel sections private(x,y,cpsrcptr) firstprivate(srcptr) lastprivate(srcptr)
{
#pragma omp section
{
//stuff
}
#pragma omp section
{
//stuff
}
}
根据Zoom profiler,创建了两个线程,一个线程执行两个部分,另一个线程只是阻塞!
以前有人遇到过这样的事吗? (是的,我确实有双核机器。)
答案 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代码的各种问题。
我的代码段无法立即看到任何错误。使用缩放分析器时,它会影响程序的执行。您是否检查过,在分析器之外,程序在不同的线程上运行这些部分?如果你有更多的部分,它们都运行在同一个线程上,还是在不同的线程上运行?如果您只有两个部分,请在测试时添加一些虚拟部分。