OpenMPをクロスプラットフォームのようにスレッド化に使用しようとしています。しかし、私は、ループが実行されている間、並列を継続した後にコードを作成する方法を理解できませんか?基本的には最初のループを並列に実行しますが、2番目の非並列ループには到達しませんか?OpenMPはスレッドを実行しますがメインを続ける
int main() {
#pragma omp parallel
while(1) {
Sleep(4000);
printf("doing work in thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
while (1) {
Sleep(4000);
printf("Hello from main %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
}
は(あなたの例では、並列領域は一方で「最初です( ){...} '並列領域の終わり(2番目の直前)には目に見えない障壁があります。 – osgx
実際、OpenMPだけはあなたが望むものにとって悪い選択です。別のスレッド(OpenMPを使うことができる)を起動し、メインスレッドを「非並列」ループに進めるのが良い解決策です。詳細については、ユースケースについて説明しています。 –
@AlexeyKukanov、私は同意しますが、OpenMPにはこの質問に記載された利点があります。 –