OpenMP разделы, работающие последовательно - PullRequest
0 голосов
/ 02 июня 2010

У меня есть следующий код:

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

Согласно профайлеру Zoom, создаются два потока, один поток выполняет оба раздела, а другой просто блокирует!

Кто-нибудь сталкивался с чем-то подобным раньше? (И да, у меня есть двухъядерный компьютер).

Ответы [ 2 ]

2 голосов
/ 04 июня 2010

Полагаю, я еще не слишком много знаю о профилировщиках, но я столкнулся с одной проблемой - забыл использовать флаг OpenMP и включить поддержку.

В качестве альтернативы, что если вы просто создали простое приложение для проверки потоков?

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

Может быть, посмотреть, если это работает?

0 голосов
/ 02 июня 2010

Нет, я не могу сказать, что сталкивался с чем-то подобным раньше. Я столкнулся с множеством проблем с кодами OpenMP.

Я не вижу сразу ничего плохого в вашем фрагменте кода. Когда вы используете Zoom profiler, это влияет на выполнение программы. Вы проверяли, что вне профилировщика программа запускает разделы в разных потоках? Если у вас есть больше разделов, все они работают в одном потоке или в разных потоках? Если у вас есть только два раздела, добавьте несколько фиктивных, пока вы проверяете это.

...