Рассчитать последний индекс l oop для каждого потока в OpenMP - PullRequest
1 голос
/ 25 февраля 2020

Если у меня есть следующее l oop

#pragma omp parallel for
for( i=0; i<10; i++ ){
    // for each thread, what will be the last index?
}

Как рассчитать последний индекс каждого потока без явного указания количества используемых потоков.

1 Ответ

0 голосов
/ 25 февраля 2020

В этом примере вы этого не делаете. OpenMP будет динамически распределять фрагменты циклов по потокам, поэтому в зависимости от количества используемых потоков он будет отличаться.

Но также у вас нет гарантии, что каждый поток выполнит только один блок, возможно (в зависимости от используемой стратегии расписания по умолчанию), что l oop будет разделено на больше блоков, чем потоков , а затем каждый поток выполнит несколько кусков.

Если вы хотите контролировать это, вы можете распараллелить для l oop самостоятельно. Сначала создайте параллельную область без ключевого слова «for», рассчитайте начальный и конечный индексы для каждого потока в зависимости от его идентификатора, а затем выполните l oop.

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