OpenMp: лучший способ создать массив с размером числа потоков - PullRequest
0 голосов
/ 13 апреля 2020

указать c Я должен рассчитать пи параллельно с OpenMp. Мне просто разрешено использовать #omp параллельно. Поэтому я хотел создать массив с размером числа процессов, а затем частично вычислить параллельную сумму, а затем вычислить суммы вместе. Но, к сожалению, невозможно получить количество потоков до параллельной версии. Так что это лучший способ создать очень большой массив и инициализировать его с 0,0, а затем рассчитать все вместе или есть лучший способ? Буду признателен за каждый ответ. Заранее спасибо!

1 Ответ

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

К счастью, невозможно заранее узнать количество потоков. Среда выполнения OpenMP не просто запускает произвольное количество потоков без какого-либо контроля со стороны программиста и пользователя программы. Напротив, он следует четко определенному механизму для определения этого числа, которое подробно описано в спецификации OpenMP . В частности, если вы не указали большее число потоков с num_threads, количество потоков, запускаемых OpenMP, ограничено значением специальной внутренней управляющей переменной (сокращенно ICV), которая называется * 1006. * nthreads-вар . Способ установки этого ICV - через переменную окружения OMP_NUM_THREADS или через вызов omp_set_num_threads() (последний переопределяет первый). Значение nthreads-var доступно при вызове omp_get_max_threads(). Для других ICV смотрите спецификацию .

Все, что вам нужно сделать, это вызвать omp_get_max_threads() и использовать возвращаемое значение в качестве размера вашего массива, поскольку число потоков не будет превышать это значение, учитывая, что впоследствии вы не вызываете omp_set_num_threads() с большим значением и не применяете предложение num_threads к конструкции parallel.

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