Поведение omp_get_max_threads в параллельных регионах - PullRequest
1 голос
/ 16 января 2010

Я скомпилировал этот фрагмент кода на 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

Ответы [ 4 ]

2 голосов
/ 16 января 2010

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

1 голос
/ 16 января 2010

С предоставленным 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.

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

0 голосов
/ 20 января 2010

Weird. Я всегда получаю ожидаемое поведение (используя 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
0 голосов
/ 20 января 2010

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

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

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