私は大きな問題に直面しています。Matlab エンジン (engOpen() など) を使用して呼び出す埋め込みの Matlab 関数を含む複雑な C アプリケーションを構築しました。次のことが起こります。
- このアプリケーションの複数のインスタンスを、各コアに 1 つずつ、マシン上で生成します
- でも!... その後、アプリケーションの速度が低下して停止します。実際、私の 16 コア マシンでは、アプリケーションの速度が約 16 分の 1 に低下します。
- これは、マシンごとに開始された matlab エンジンが 1 つしかなく、16 個のインスタンスすべてが同じ matlab のコピーを共有しているためであることに気付きました。
- これをmatlab GUIで再現しようとしましたが、同じ問題です。GUI で 14 秒かかるプログラムを実行し、2 つの GUI で同時に実行すると 28 秒かかります
これは私にとって大きな問題です。なぜなら、matlab を使用せずに C アプリケーション全体を再プログラムしなければならない場合、締め切りに間に合わないからです。matlab には並列プログラミング用のコマンドがあることは知っていますが、私の matlab 呼び出しは C アプリケーションに埋め込まれており、C アプリケーションの複数のインスタンスを実行したいと考えています。繰り返しになりますが、締め切りに間に合わないため、C アプリケーション全体をリファクタリングすることはできません。
これに対する解決策があるかどうか誰でも教えてください (たとえば、同じマシンで複数の matlab プロセスを実際に開始するなど)。追加のライセンスの料金を支払うつもりです。現在、すべてのマシンに完全にライセンスされた matlab がインストールされています。
どうもありがとうございました!
編集
Ben Voigt さん、ご協力ありがとうございます。Matlab の 1 つのインスタンスが既に複数のコアを使用していることがわかりました。実際、1 つのインスタンスを実行すると、4 つのコアが完全に使用されていることがわかります。Matlab の 2 つのコピーを実行すると、8 コアをフルに活用できます。したがって、実際には並行して実行されます。ただし、2 つのインスタンスが 2 倍の処理能力を使用しているように見えますが、それでも 2* の速度低下が発生します。したがって、2 つのインスタンスは 2 倍の結果を得て、計算能力の合計は 4 倍になるようです。それはなぜでしょうか?