Matlab mcc を介して C/C++ dll として公開されている Matlab 数値ルーチンと、Math Kernel Library にある同等のルーチンとの間に大きなパフォーマンスの違いはありますか?
特に、?gels やフーリエ変換ルーチンなどの線形最小二乗ソルバーのパフォーマンスに関心があります。
Matlab は、fftw、lapack、mkl と呼ばれるものにレイヤーを追加します。
どんなコードでも特別なバージョンをコンパイルすると、matlab のオーバーヘッドなしで常に高速に実行されます。
自分が何をしているのかわからない場合は、組み込みライブラリを使用してください。私のような古い f77 ハッカーである場合は、独自のルーチンを作成し、怠惰なときやプロトタイピングを行うときにのみ組み込みライブラリを使用します。アルゴリズム。
フーリエ変換ルーチンについては、使用シナリオに応じてFFTWをお勧めします。FFTW は、一度準備すればよく再利用するシナリオ向けに最適化されています。したがって、同じ種類の変換を計算する必要がある場合、たとえばループ内で 1024x2000 (2 のべき乗でない) 変換を行う場合、FFTW の方が高速になります。異なる変換タイプ (次元が毎回変わる) を計算する必要がある場合は、MKL の方が高速です。
FFTW が機能する方法は、ソフトウェアが最初に準備ルーチンを呼び出すことです。これには、特定のプラットフォームをチェックして最適化されたルーチンを選択するために、数ミリ秒から数秒かかります (これは構成できます)。その後、最適化されたパラメーターを使用して変換ルーチンを繰り返し呼び出すことができます。
他のすべての既知のライブラリには修正された最適化があり、これはプラットフォームに最適である場合とそうでない場合があります。