Поведение omp_get_max_threads в параллельных регионах

StackOverflow https://stackoverflow.com/questions/2078615

  •  21-09-2019
  •  | 
  •  

Вопрос

Я компилирую этот фрагмент кода в Snow Leopard и Linux и получаю разные результаты.В Snow leopard первый вызов omp_get_max_threads возвращает 2 — мое количество ядер, а второй — 1.В Linux оба вызова возвращают 4 — мое количество ядер.Я думаю, что Linux ведет себя правильно, я прав?Оба варианта верны, и я просто неправильно понимаю эту функцию?

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

int main() {
  printf(" In a serial region; max threads are : %d\n", omp_get_max_threads());
#pragma omp parallel
{
  #pragma omp master
  printf(" In a parallel region; max threads are : %d\n", omp_get_max_threads());
}
}

Вывод Mac:

 In a serial region; max threads are : 2
 In a parallel region; max threads are : 1

Выход Linux:

 In a serial region; max threads are : 4
 In a parallel region; max threads are : 4
Это было полезно?

Решение

этот вызов хорошо указан в спецификации openmp.Linux здесь ведет себя правильно.с учетом вышесказанного вы находитесь в главном регионе, который фактически является последовательным и является основным потоком, поэтому вызов num threads объясним.Если вы не привязаны к чистому C, я бы посоветовал вам взглянуть на библиотеку C++ tbb и особенно на подмножество ppl, вы найдете больше общности и компонуемости, как в случае вложенного параллелизма.Я говорю с телефона, поэтому прошу прощения за опечатки.

Другие советы

С поставляемым Apple gcc 4.2 [gcc версии 4.2.1 (Apple Inc.сборка 5566)] на Leopard я получаю те же результаты, что и вы (за исключением того, что у моего MacBook меньше ядер).

In a serial region; max threads are : 2
In a parallel region; max threads are : 1

То же самое для 4.3.4 от MacPorts.

Однако с gcc 4.4.2 и 4.5.0 20091231 (экспериментальная) от MacPorts на том же компьютере я получаю:

In a serial region; max threads are : 2
In a parallel region; max threads are : 2

Похоже, это не проблема Mac и Linux, а проблема с версией gcc.

P.S.OpenMP может выполнять вложенный параллелизм.

Напоминаем, что существует форум, посвященный только OpenMP, который читают разработчики OpenMP, а также эксперты OpenMP со всего мира.Все закончилось на официальном сайте OpenMP: http://openmp.org/forum

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

Странный.Я всегда получаю ожидаемое поведение (используя 4.2.1, сборка 5646 точка 1) с OS X 10.6.2:

На моем Mac Pro

 In a serial region; max threads are : 8
 In a parallel region; max threads are : 8

и на моем iMac

In a serial region; max threads are : 2
In a parallel region; max threads are : 2

Должно быть, здесь происходит что-то еще.Компиляция с помощью просто?

gcc fname.c -fopenmp
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top