C ++ OpenMP программа - PullRequest
       4

C ++ OpenMP программа

7 голосов
/ 07 января 2011

Я пытаюсь получить параллельный эффект в программе на C ++, используя следующий код:

#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

Я что-то не так делаю?

Спасибо

Ответы [ 2 ]

4 голосов
/ 07 января 2011

Как вы скомпилировали программу? OpenMP активирован?

Кроме того, намного более простой Hello World выглядит следующим образом, если вы хотите получить чередование символов:

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;
}
3 голосов
/ 07 января 2011

Код правильный, но чересстрочный вывод может быть трудно получить из таких небольших программ. Попробуйте сделать несколько вызовов для sleep или аналогичных между выходными операторами и выполните некоторую очистку.

(Вы компилировали и связывали с -openmp, -fopenmp, или с тем, что хочет услышать ваш компилятор?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...