我已經用「pragma omp for」循環使用了OpenMP,現在想試試OpenMP任務。 但是,一個簡單的程序,它應該運行2個任務並行似乎並沒有工作。 我誤解了任務的使用或錯誤嗎?gcc openmp任務不起作用
#include<iostream>
#include<omp.h>
//ubuntu 12.04 LTS, gcc 4.6.3
//g++ test_omp.cpp -fopenmp
int main()
{
#pragma omp parallel
{
#pragma omp single
{
#pragma omp task
{
while(true)
{
usleep(1e6);
#pragma omp critical (c_out)
std::cout<<"task1"<<std::endl;
}
}
#pragma omp task
{
while(true)
{
usleep(1e6);
#pragma omp critical (c_out)
std::cout<<"task2"<<std::endl;
}
}
}
}
}
輸出是: TASK1 TASK1 TASK1 .....
因此,第二個任務沒有運行。
我想到了一個OpenMP的任務始終是某種「重生」或「叉」,並且遇到了這個任務會繼續他的工作線程。但是我錯了。 – martin7743