Domanda

compilo questo pezzo di codice su Snow Leopard e Linux e ottengo risultati diversi. Il Leopardo delle nevi, la prima chiamata di omp_get_max_threads restituisce 2, che è il mio numero di core, mentre il secondo torna 1. Su Linux, entrambe le chiamate di ritorno 4, che è il mio numero di core. Penso che Linux ha il comportamento corretto, ho ragione? Sono sia corretta e non mi resta che un malinteso di questa funzione?

#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());
}
}

uscita Mac:

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

uscita Linux:

 In a serial region; max threads are : 4
 In a parallel region; max threads are : 4
È stato utile?

Soluzione

Questa chiamata è ben specificato nelle specifiche OpenMP. Linux ha il comportamento corretto qui. con questo detto, ci si trova in una regione principale che è effettivamente seriale e FHE il filo principale, quindi la num thread chiamano è spiegabile. se si arent legato al puro c io vi incoraggio a guardare la libreria C ++ TBB e in particolare il ppl sottoinsieme, troverete più generalità e la componibilità, come per il parallelismo annidato. Sono su MyPhone quindi mi scuso per errori di battitura qui.

Altri suggerimenti

Con Apple fornito gcc 4.2 [versione di gcc 4.2.1 (Apple Inc. costruire 5566)] su Leopard, ottengo gli stessi risultati, come si (tranne che il mio MacBook hanno un minor numero di core).

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

Lo stesso vale per 4.3.4 da MacPorts.

Tuttavia, con gcc 4.4.2 e 4.5.0 20.091.231 (sperimentale) da MacPorts, sullo stesso computer ottengo:

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

Sembra che questo non è un Mac rispetto a Linux problema, ma a causa della versione gcc.

P.S. OpenMP può fare il parallelismo annidato.

Solo un promemoria, c'è un forum dedicato solo per OpenMP, e leggere dagli sviluppatori di OpenMP, nonché esperti OpenMP tutto il mondo. E 'finita sul sito ufficiale OpenMP: http://openmp.org/forum

Ottimo posto per porre domande come questa, e di trovare un sacco di altre risorse a openmp.org

Strano. Ho sempre trovato il comportamento previsto (utilizzando 4.2.1, costruisco 5646 punti 1) con OS X 10.6.2:

Sul mio Mac Pro

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

e sul mio iMac

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

Deve essere qualcos'altro qui. La compilazione con solo?

gcc fname.c -fopenmp
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top