5

MATLABは数学言語と同じくらい優れていますが、その速度はそれほど速くありません。MATLABコードの実行を高速化するための一般的な方法は何ですか?たとえば、forループを実行する代わりに、ベクトル/行列形式で計算を実行できる場合、コードの実行が高速化されることを私は知っています。

私は他の提案は何であるか疑問に思っています。

4

5 に答える 5

5

ここにいくつかの基本的なパフォーマンスのヒントがあります:

  1. プロファイラーを使用して、計算のどの部分が遅いかを理解する方法を学びます
  2. ベクトル化を介して高価な関数呼び出しの量を制限する
  3. アレイをループで拡張するのではなく、事前に割り当てます
  4. マルチスレッド関数(などbsxfun)を使用する
  5. 最新バージョンのMatlabを使用してください-過去5年間でパフォーマンスが大幅に向上しています
  6. マルチコアおよび/またはGPU処理に並列ツールボックスを使用する
  7. 効率的なアルゴリズムを使用する
  8. 必要に応じてJavaまたはC/C ++コードを使用します(ただし、スピードアップは期待外れになる可能性があります)
于 2012-07-16T01:47:07.813 に答える
4

簡単に並列化できる操作を多数実行している場合は、ループparforが自動的に並列化されます:http: //www.mathworks.com/help/toolbox/distcomp/parfor.htmlfor

于 2012-07-15T22:34:05.297 に答える
2

Lightspeedのインストール。

私は最近、TomMinkaのLightspeedをMacにインストールするという苛立たしいプロセスを経験しました。その過程で、他のMacユーザーと共有する価値のあるいくつかの難しい教訓を学びました。私のシステムの仕様は次のとおりです。OSXバージョン10.8.5Xcodeバージョン4.6.3Matlabバージョン2011a

1)Lightspeedが名前にスペースが含まれていないパスにインストールされていることを確認してください。「ライブラリ/アプリケーションサポート/Matlab」に入れるのを間違えたので、とてつもなくトラブルが発生しました。特に、Tomer Levinboim(levinboim.blogspot.co.nz)によって報告された同じ問題が発生しましたが、彼の修正では問題が完全には解決されなかったという問題が追加されました。

2)MichelValstarのメモ「MacでのMatlabMexファイルのコンパイル」を読み、Mathworks(http://www.mathworks.com/matlabcentral/answers/94092)から推奨パッチをインストールします。このパッチは、Levinboimが識別する必要なすべてのフラグ/オプションの変更を適用します。

3)lightspeedフォルダー内のinstall_lightspeed.mファイルの行options.COMPFLAGSを、次のように変更します。

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk

4)Matlabで、現在のパスがLightspeedフォルダーを指していることを確認します。コマンドinstall_lightspeedを実行します。成功した場合は、test_lightspeedを実行します。これで、Lightspeedの動作バージョンができました。

5)パス設定はセッション間で保持されるため、ReadMeで提案されているstartup.shアプローチはMacでは不要のようです。ただし、その道を進みたい場合は、最初に次のように読んでください
。startup.mはどこにあるのでしょうか。 http://obasic.net/set-your-customized-startup-file-for-matlab

于 2013-12-26T03:16:27.613 に答える
1

ここでベクトル化について考え始めるためのいくつかの方法を検討し始めるかもしれません。
その後、ここで提供されるPDFは、不完全ではありますが、優れたパフォーマンスを提供する多くのMatlabイディオムを提供します。

于 2012-07-15T22:26:20.017 に答える
0

私はここでこれを見つけました:高速MATLABコードの記述。Pascal Getreuerとこれはここにあります:LightspeedToolbox。素晴らしいもの...

于 2012-08-05T17:48:42.873 に答える