我正在尝试使用以下代码在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
我做错了吗?
由于
答案 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
或编译器想要听到的内容?)