Как я могу заставить потоки работать в последовательном порядке? (OpenMP) - PullRequest
0 голосов
/ 29 марта 2020

Уже понятно, как работает параллельное программирование, но есть ли способ, которым я могу распечатать последовательный порядок потоков?

#include <omp.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char* argv[])
{
    #pragma omp parallel 
    {
        printf("Hello World... from thread = %d\n",
            omp_get_thread_num());
    }

}

мой вывод:


Hello World... from thread = 2
Hello World... from thread = 3
Hello World... from thread = 0
Hello World... from thread = 1

цель вывода:


Hello World... from thread = 0
Hello World... from thread = 1
Hello World... from thread = 2
Hello World... from thread = 3

1 Ответ

1 голос
/ 15 апреля 2020

Как предлагается в комментариях, вы можете использовать ключевое слово ordered, чтобы получить выходные данные в порядке. На практике вы хотите иметь много независимых вычислений, а затем только печатать (или копировать или что-то еще) результат по порядку.

Не эксперт в этом, но вот как я это делаю (работает на g cc и msv c):

#include <stdio.h>
#include <omp.h>

int blah(int argc, char* argv[]) {
    // this may or may not be necessary..
    omp_set_num_threads(omp_get_max_threads());

    int i;
#pragma omp parallel
#pragma omp for ordered schedule(static, 1)
    for(i = 0; i < omp_get_num_threads(); i++)
    {
        // This is where the heavy computations go
#pragma omp ordered
        {
            // synchronized and in order; keep this short
            printf("Hello World... from thread = %d\n", omp_get_thread_num());
        }
    }

    return 0;
}

Не понимаю, почему за ваш вопрос проголосовали. Наличие результата в заказе является допустимым вариантом использования imho.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...