いくつかのコードを並列化しようとしていますが、(おそらくばかげた) 問題が発生しています。以下のコード例は「12」を返しますが、「21」を期待します。
omp_get_max_threads() は 8 を返し、omp_get_num_threads() は 1 を返し、omp_get_thread_num() は、このブロックのどこかで呼び出すと 0 を返します。マスタースレッドによって順番に実行されるだけだと結論付けることができると思います。
#include <omp.h>
#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
{ Sleep(200);
cout << "1"; }
#pragma omp section
{ cout << "2"; }
}
}
私は何を間違っていますか?これらのセクションの並列処理を強制するにはどうすればよいですか?
コンテキスト: 2 台の USB 3.0 カメラからデータをストリーミングしていますが、それぞれからの画像の呼び出しが非常に遅く、フレームが失われています。基本的に、カメラごとに 1 つのスレッドを確保して、その画像を絶えず要求したいと考えています。
この質問のタイトルは似ていますが、役に立ちませんでした。Visual Studio 2010 を使用しています。