私は、Math.Net を使用して三重対角システムを解くことに取り組んでいました。MKL (x86) と OpenBLAS 拡張機能をインストールしましたが、CPU 使用率を見ると、1 つのコアしか動作していないようです。これがコードです
MathNet.Numerics.Control.UseNativeMKL();
MathNet.Numerics.Control.UseMultiThreading();
Matrix<double> A;
Vector<double> x;
Vector<double> b;
// *** FILL A and B ***
for (int n = 0; n < 50000; n++)
x = A.Solve(b);
もちろん、これは実際のコードを大幅に簡略化したものですが、複数の CPU を使用する場合には何も役に立ちません。
コードは最適化を有効にしてリリースでコンパイルされ、「任意の CPU」と「x64」の両方を試しました。
私は何か間違ったことをしていますか?
[編集] 言及するのを忘れていましたが、 for ループ中に A と b が変更される可能性があるため、 for ループを並列化できません。この質問は、「Math.Net に LA プロバイダーのマルチスレッド ラッパーを強制的に使用させるにはどうすればよいですか?」に重点を置いています。