質問: 0; k < matrixAColumns; k++) { product[i, j] += matrixA[i, k] * matrixB[k, j]; } } }); ``` ### 試したこと プラットフォームをx64,x86にする、32ビットのチェックを外す CUDAのverを9.2にしてみる ### 補足情報(FW/ツールのバージョンなど)
回答: 他のサイト様を参考に修正してみたら上手く動作しました。 修正後コード ``` var gpu = Gpu.Default; gpu.For(0, matrixARows, i => { double temp=0; for (int j = 0; j < matrixB.GetLength(1); j++) { for (int k = 0; k < matrixA.GetLength(1); k++) { temp += matrixA[i, k] * matrixB[k, j]; } product[i, j] = temp; } }); ``` product[x,x]の初期化がされてないのかと思い、double temp=0;を消してその下のループでproduct[i,j]=0;を入れてみましたが、そちらの方では同様のエラーでしたので、代入演算子が悪さをしていたようです。 gpu.For内で宣言した変数はGPU側に確保される仕様であって、修正前の状態ではどちらも外(CPU側)で宣言した変数だったために演算前後ともGPU側に実体が存在していなかったことが原因だったのだろうと考えました。 お騒がせ致しまして申し訳ございません。