2011-01-07 1 views
7
나는 다음과 같은 코드를 사용하여 C++ 프로그램의 병렬 효과를 얻기 위해 노력하고

: 나는 때문에 병렬로 인터리브 출력을 기다리고 있었다 .. 나는이 프로그램을 여러 번 실행했다C++의 OpenMP 프로그램

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

을 ..

그러나, 나는이 프로그램을 출력을 실행할 때마다입니다 : 내가 뭔가 잘못하고 있습니까

Hello World 
Hello World 
Hello World 
Hello World 

?

감사

+0

얼마나 많은 코어/프로세서 컴퓨터가 실제로있다 : 당신이 인터리빙 문자를 얻으려면 그것과는 별도로

, 훨씬 간단 안녕하세요는 다음과 같습니다? –

+0

코어 4 개 ... 하나의 코어에서만 효과를보고 싶다면 어떻게해야합니까? – Betamoo

+2

CPU가 하이퍼 스레딩을하지 않는 한 * 하나의 코어에만 영향을 미칩니다 *. –

답변

3

코드는 정확하지만 인터리브 출력은 작은 프로그램에서 얻을 어려울 수 있습니다. 출력 문 사이에 sleep 또는 유사 전화를 걸고 플러시를 시도하십시오.

는 (당신은 컴파일했고, 링크 -openmp-fopenmp, 또는 어떤 컴파일러는 듣고? 원하는)

+0

'-openmp'로 컴파일 중입니다 ... – Betamoo

+0

수면이 잘 됐습니다 ... thnx – Betamoo

4

어떻게 프로그램을 컴파일? OpenMP가 활성화되어 있습니까?

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