私は、プログラムに有効なスドクパズルソリューションが提供されているかどうかをテストするプログラムを設計しています。私は最初にC++で設計しましたが、今はそれを並列化しようとします。プログラムはエラーなく正常にコンパイルされます。C++関数にopenMPを適用して、sudokuパズルソリューションのすべての行を検証する方法は?
まず、構造化ブロックの内部でreturn文を使用する方法を理解しなければなりませんでした。私は真に初期化されたboolの配列を作ることにしました。しかし、この関数からの出力はfalseであり、私が提出している解決策が真実であることはわかっています。私はopenMPを初めて使っていて、誰かが私を助けてくれるのだろうかと思っていました。私は問題を感じている
は私の変数が戻っに設定すると、おそらくまた、バックに設定して得る私の他の変数nextSudokuNumとなっています。
bool test_rows(int sudoku[9][9])
{
int i, j, a;
int nextSudokuNum = 1;
bool rowReturn[9];
#pragma omp parallel for private(i)
for(i = 0; i < 9; i++)
{
rowReturn[i] = true;
}
#pragma omp parallel for private(i,j) \
reduction(+: a, nextSudokuNum)
for(i = 0; i < 9; i++)
{
for(j = 0; j < 9; j++)
{
a = 0;
while(sudoku[i][a] != nextSudokuNum) {
a++;
if(a > 9) {
rowReturn[i] = false;
}
}
nextSudokuNum++;
}
nextSudokuNum = 1;
}
for(i = 0; i < 9; i++)
{
if(rowReturn[i] == false) {
cout << "Invalid Sudoku Solution(Next Valid Sudoku Number Not Found)" << endl;
cout << "Check row " << (i+1) << endl;
return false;
}
}
cout << "Valid sudoku rows(Returning true)" << endl;
return true;
}
:
したがって、あなたの新しいコードは次のようになります。私は間違っている間違って読む必要があります。私はあなたが++演算を追跡しているときに、そのプロセスの合計を追跡するために減算を使用しなければならないと考えました。私は再び本を打つ必要があると思う。私はopenmpをよりよく理解するのに役立つリソースをお持ちですか? YouTubeの動画や有益な記事ご協力ありがとうございました! – xTaylorFerg
あなたが削減について説明したのはまさに正しい... ...ですが、異なるプロセスによって増分された共有変数のみです*。古典的な削減の例は、異なるプロセスが配列の異なる部分で動作している配列の要素を要約しようとしています。 – NoseKnowsAll
私は[この本](http://www.amazon.com/Using-OpenMP-Programming-Engineering-Computation/dp/0262533022)が非常に役に立ちましたが、無料の[オンラインチュートリアル](https:// computing。 llnl.gov/tutorials/openMP /)も参考になりますが、私の意見ではそれほど親切ではありません。 – NoseKnowsAll