2011-01-07 15 views
7

Sto cercando di ottenere un effetto parallelo in programma in C++ utilizzando il seguente codice:C++ OpenMP programma

#include<iostream> 
using namespace std; 

int main() 
{ 

#pragma omp parallel sections 
    { 
#pragma omp section 
     { 
     cout<<"Hello"; 
     cout<<" "; 
     cout<<"World"; 
     cout<<endl; 

     } 
#pragma omp section 
     { 
     cout<<"H"; 
     cout<<"ello"; 
     cout<<" W"; 
     cout<<"orld"; 
     cout<<endl; 
     } 
#pragma omp section 
     cout<<"Hello"<<" "<<"World"<<endl; 
#pragma omp section 
{  cout<<"Hello "; 
     cout<<"World"<<endl; 
} 
    } 
    return 0; 
} 

avevo eseguire questo programma molte volte .. Mi aspettavo di uscita interlacciata a causa di parallelismo ..

Tuttavia, ogni volta che esegue questo programma l'uscita è:

Hello World 
Hello World 
Hello World 
Hello World 

Sto facendo qualcosa di sbagliato?

Grazie

+0

il numero di core/processori vostra macchina è in realtà? –

+0

4 core ... E se volessi vedere l'effetto su un solo core? – Betamoo

+2

a meno che la CPU non esegua hyperthreading, * non ci siano effetti * su un solo core. –

risposta

3

Il codice è corretto, ma la produzione interlacciato può essere difficile da ottenere da piccoli programmi simili. Prova a mettere alcune chiamate a sleep o simili tra le istruzioni di output e fai un po 'di flushing.

(lo si compila e legame con -openmp, -fopenmp, o qualunque sia il vostro compilatore vogliono sentire?)

+0

Sto compilando con '-openmp' ... – Betamoo

+0

Sonno lavorato ... thnx – Betamoo

4

Come avete compilato il programma? OpenMP è attivato?

A parte questo, una molto più semplice Ciao Mondo assomiglia a questo, se si desidera ottenere caratteri interleaving:

int main() { 
    char const* str = "Hello world"; 
    unsigned const len = std::strlen(str); 
    #pragma omp parallel for num_threads(4) 
    for (unsigned thread = 0; thread < 4; ++thread) 
     for (unsigned i = 0; i < len; ++i) 
      std::cout << str[i] << std::endl; 
}