OMP один висит внутри для - PullRequest
       10

OMP один висит внутри для

1 голос
/ 25 апреля 2011

Быстрый вопрос ... У меня есть следующий код:

void testingOMP()
{
    #pragma omp parallel for
    for(int i=0;i<5;i++)
    {
        #pragma omp single 
        cout << "During single: " <<omp_get_thread_num() << endl;
        cout << "After single: " << omp_get_thread_num() << endl;
    }
}

, который зависает, давая следующий вывод:

Во время одиночного: 1 После одиночного: 1 После одиночного: После сингла: 2Dure сингл: 0

1

Мне пришлось нажать Ctrl + C, чтобы остановить его.Одна директива разделения работы гарантирует, что только один поток выполняет блок кода, имеющий в конце барьер синхронизации.Я думаю, что это проблема, потому что, если я использую master (который не ждет) или добавляю nowait, программа не зависает.

Если бы кто-нибудь мог сказать мне, почему это происходит, я был бы очень признателен.

1 Ответ

4 голосов
/ 29 апреля 2011

На самом деле, вложение директивы single непосредственно в директиву for (или наоборот) недопустимо. Смотри https://computing.llnl.gov/tutorials/openMP/#BindingNesting

...