私はompタスク(ビジュアルスタジオ2015を使用)を使用することができないため、ネストされたループタスクの回避策を見つけようとしています。コードは以下の通りである:OMP 2.0ネストされたForループ
#pragma omp parallel
{
for (i = 0; i < largeNum; i++)
{
#pragma omp single
{
//Some code to be run by a single thread
memset(results, 0, num * sizeof(results[0]));
}
#pragma omp for
for (n = 0; n < num; n++) {
//Call to my function
largeFunc(params[n], &resulsts[n])
}
}
#pragma omp barrier
}
私はすべての私のスレッドがlargeNum時間を実行したいのですが、ゼロに設定することがmemsetのを待ち、その後、私はlargeFuncは、各スレッドで実行されたいです。私が見つけたデータ依存性はありません。
私はこの時点で、ompのディレクティブがすべて私の頭の中で混乱しているのを見ました。このソリューションは機能しますか?タスクなしで行うより良い方法はありますか?
おかげで、 アリック
'for'ループで' largeFunc'を使って '#pragma omp parallel for'を使うのではなく、残りのompを削除してみませんか?そのループは、あなたが並行して実行したい唯一のものと思われます。 – amaurea
私はlargeNumループをスレッド間で分割したくありません。 –