2011-01-07 20 views
7

que estoy tratando de conseguir un efecto paralelo en el programa en C++ usando el siguiente código:C++ OpenMP programa

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

había ejecutar este programa muchas veces .. yo estaba esperando la salida intercalada debido al paralelismo ..

Sin embargo, cada vez que ejecute este programa, la salida es:

Hello World 
Hello World 
Hello World 
Hello World 

¿Estoy haciendo algo mal?

Gracias

+0

¿Cuántos núcleos/procesadores de su máquina tiene en realidad? –

+0

4 núcleos ... ¿Y si quiero ver el efecto en un solo núcleo? – Betamoo

+2

a menos que su CPU haga hyperthreading, * no hay efecto * en solo un núcleo. –

Respuesta

3

El código es correcto, pero la producción intercalado puede ser difícil de obtener de este tipo de programas pequeños. Intente realizar algunas llamadas al sleep o similar entre declaraciones de salida y realizar algunas descargas.

(Quizás quiso compilación y enlace con -openmp, -fopenmp, o lo que su compilador quieren oír?)

+0

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

+0

Sueño trabajado ... thnx – Betamoo

4

¿Cómo se ha compilado el programa? ¿OpenMP está activado?

Aparte de eso, un Hello World mucho más simple se parece a esto, si usted desea conseguir el entrelazado caracteres:

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; 
}