Дождитесь завершения всего блока omp, прежде чем вызывать вторую функцию - PullRequest
0 голосов
/ 23 октября 2018

У меня нет опыта работы с openmp на C ++, и я хотел бы узнать, как правильно решить мою проблему.У меня есть 30 файлов, которые должны обрабатываться независимо одной и той же функцией.Каждый раз, когда функция активируется, генерируется новый выходной файл (от out01.txt до out30.txt) с сохранением результатов.У меня 12 процессоров на моей машине, и я хотел бы использовать 10 для этой проблемы.

Мне нужно изменить код, чтобы дождаться обработки всех 30 файлов для выполнения других подпрограмм в C ++.В данный момент я не могу заставить свой код дождаться выполнения всей области действия omp, а затем переместить вторую функцию.

Ниже приведен черновик моего кода.

   int W = 10; 
   int i = 1;
   ostringstream fileName;
   int th_id, nthreads;

        omp_set_num_threads(W);
        #pragma omp parallel shared (nFiles) private(i,fileName,th_id)
        {
             #pragma omp for schedule(static)
            for ( i = 1; i <= nFiles; i++)
            {
                th_id = omp_get_thread_num();
                 cout << "Th_id: " << th_id << endl;

            // CALCULATION IS PERFORMED HERE FOR EACH FILE

            }
        }

            // THIS is the point where the program should wait for the whole block to be finished
            // Calling the second function ...

1 Ответ

0 голосов
/ 24 октября 2018

Прагмы "omp for" и "omp параллельные" имеют неявный барьер в конце своей области видимости.Следовательно, код после параллельной секции не может быть выполнен до тех пор, пока параллельная секция не завершится.Таким образом, ваш код должен работать идеально.

Если проблема сохраняется, то это не потому, что ваш код не ждет в конце параллельной области.

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

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