C ++ OpenMP程序

时间:2011-01-07 16:28:02

标签: c++ openmp

我正在尝试使用以下代码在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 个答案:

答案 0 :(得分:4)

你是如何编制程序的? 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;
}

答案 1 :(得分:3)

代码是正确的,但交错输出很难从这么小的程序中获得。尝试在输出语句之间调用sleep或类似的函数,然后进行一些刷新。

(您是否编译并链接到-openmp-fopenmp或编译器想要听到的内容?)