OMP parallelo ID thread ciao mondo

Sto cercando di iniziare con l’utilizzo di base di OpenMP funzionalità in C. la Mia comprensione di base di ‘omp parallel per’ mi porta a credere che segue deve distribuire le seguenti iterazioni tra thread e deve eseguire simultaneamente. L’output che si ottiene è come indicato di seguito. Il Codice Di Seguito. C’è qualcosa di sottile mi manca nel mio esempio “hello world”?

Ciao Mondo da omp thread 0
Ciao Mondo da omp thread 0
Ciao Mondo da omp thread 0
Ciao Mondo da omp thread 0
Ciao Mondo da omp thread 0
Ciao Mondo da omp thread 0
ecc..

 int HelloFunc()
{
    int i;
    int numthreads = 8;
#pragma omp parallel for default(none) num_threads(numthreads) private(i)
    for (i = 0; i < 100; i++)
    {
        int tid = omp_get_thread_num();
        printf("Hello world from omp thread %d\n", tid);
    }
    return -1;
}

int main()
{
    int result = HelloFunc();
}
  • Il vostro computer è probabilmente solo l’utilizzo di un thread per eseguire questo programma. OMP non forzarlo a correre con più thread, solo che dice al compilatore che si può e si imposta l’ambiente necessario per farlo accadere.
  • Penso di si può fare che una risposta se postarla in quanto la risposta alla mia domanda. Non esistono modi per forza questo comportamento avrei raccogliere dalla tua risposta?
  • È possibile richiedere che OpenMP l’utilizzo di uno specifico numero di thread, impostando il OMP_NUM_THREADS variabile di ambiente. Il numero massimo di thread può essere richiesto all’interno del codice con omp_get_max_threads()
InformationsquelleAutor Oliver | 2015-03-05



2 Replies
  1. 4
    #include <omp.h>
    #include <stdio.h>
    
    
     int HelloFunc()
    {
        int i;
        int numthreads = 8;
    #pragma omp parallel for default(none) num_threads(numthreads) private(i)
        for (i = 0; i < 100; i++)
        {
            int tid = omp_get_thread_num();
            printf("Hello world from omp thread %d\n", tid);
        }
        return -1;
    }
    
    int main()
    {
        HelloFunc();
    
      return 0;
    }

    quindi compilare :

    gcc t.c -fopenmp -Wall

    e di esecuzione :

    ./a.out

    di uscita :

    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 7
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 3
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 0
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 6
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 5
    Hello world from omp thread 2
    Hello world from omp thread 2
    Hello world from omp thread 4
    Hello world from omp thread 4
    Hello world from omp thread 4
    Hello world from omp thread 4
    Hello world from omp thread 2
    Hello world from omp thread 1
    Hello world from omp thread 4
    Hello world from omp thread 2
    Hello world from omp thread 1
    Hello world from omp thread 4
    Hello world from omp thread 2
    Hello world from omp thread 2
    Hello world from omp thread 4
    Hello world from omp thread 1
    Hello world from omp thread 1
    Hello world from omp thread 1
    Hello world from omp thread 1
    Hello world from omp thread 1
    Hello world from omp thread 1
    Hello world from omp thread 1
    Hello world from omp thread 2
    Hello world from omp thread 4
    Hello world from omp thread 1
    Hello world from omp thread 2
    Hello world from omp thread 4
    Hello world from omp thread 1
    Hello world from omp thread 1
    Hello world from omp thread 4
    Hello world from omp thread 2
    Hello world from omp thread 1
    Hello world from omp thread 4
    Hello world from omp thread 4
    Hello world from omp thread 2
    Hello world from omp thread 2
    Hello world from omp thread 2
    Hello world from omp thread 2
    • Questo è il fine educativo esempio per dimostrare che le cose funzionino come l’OP previsto quando ci sono più thread. Tuttavia, per reale codici è generalmente una cattiva idea per forza il numero di thread in modo esplicito nel codice, perché a un certo punto si acquista una macchina nuova, o qualcun altro si vuole utilizzare, e poi potrete trascorrere un giorno o due vi chiedete perché non correre più veloce, pur avendo due volte come molti core!
    • Cownie. Ok. Puoi mostrare il codice per che? TIA
    • Basta togliere la esplicita num_threads clausola 🙂
  2. 2

    Il vostro computer è probabilmente solo l’utilizzo di un thread per eseguire questo programma. OMP non forzarlo a correre con più thread, solo che dice al compilatore che si può e si imposta l’ambiente necessario per farlo accadere.

    Non c’è un modo per forzare l’OMP a fare qualcosa in più thread di quello che sarebbe altrimenti. E non si vuole dal OMP imposta automaticamente il tutto fino a far correre il più veloce possibile.

Lascia un commento