私はすでに "プラグマ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;
}
}
}
}
}
出力は次のようになりますので、2番目のタスクが実行されていない TASK1 TASK1 TASK1 .....
。 OpenMPの仕様から
私はOpenMPのタスクは常に「卵」または「フォーク」と、このタスクは、彼の仕事を続けて遭遇したスレッドのいくつかの種類であると思いました。しかし、私は間違っていました。 – martin7743