私はここでの問題は、私のコードは、のA+=B
部分に多くの計算を行っているということである。この交換
#pragma omp parallel shared(vector1) private(i,j)
{
#pragma omp for schedule(dynamic)
for (i = 0; i < vector1.size(); ++i){
//some code here
for (j = 0; j < vector1.size(); ++j){
//some other code goes here
#pragma omp critical
A+=B;
}
C +=A;
}
}
のように動作し、ネストされたループ上のOpenMPを使用していますコード。したがって、それを重要なものにすることによって、私はスピードアップを達成していません。 (実際には、プログラムの実行に時間がかかり、それが順番に書かれているので、オーバーヘッドがあるようです。
私はこれはしかし、実行時間をスピードアップし、それは私がAの同じ結果を得ていないおりますのでcritical
句のような競合状態の世話をしていないようだ
#pragma omp reduction private(B) reduction(+:A)
A+=B
を使用してみました
これに代わる方法はありますか?
あなたの擬似コードだけで、私たちがあなたを助けることができるものがほとんどないので、[最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)を投稿してください。 。 – Gilles
あなたは正しいかもしれないが、その間にreduce()は競争条件を正しく処理しないだろうか? –
もちろん、それはこのように振る舞います。「批判的」と「削減」は何をしていますか?あなたは、プログラムの意味を完全に変えるアイデアを無作為に適用しているようです。 'A'と' B'は定義されていないので、このスニペットが何を意味するのかを推測することは全く不可能です。 「競合状態を世話しているプラグマ」というものはありません。これは手渡されているため、コードが表示されないように構造化する責任があります。私。何もそれを世話しない、彼らは現れないことが保証されています。 – luk32