2009-11-23 52 views
5

私は、MATLAB 2009bで書かれたコードを持つ医学研究者です。自己参照ループ(ここではプログラミング用語ではありません)のために非常に遅く実行されます。つまり、最初の反復の結果は(私はプロファイラを実行しました)MATLABコードをFortranに変換する

私はコードの遅い部分をmex関数に変換したいと思います。私は1970年代初めにFortranを学んだが、以来それを使用していない。私が変換する必要があるコードは何も気にしません、それはちょうど長い数値計算です。

私の質問は、この目的にふさわしいFortranの最も簡単なバージョンとは何でしょうか。これに対して、どのコンパイラがIntel Macで最もうまくいくのでしょうか?たとえば、MATLABの構文をFortran 90と比較した情報が見つかりました。この変換はあまりにも厄介なようには見えませんでした。しかし、私はプログラマーではありません。

OS 10.6のMacBook Proを使用しています。

ありがとうございました。

+0

どのように皮肉。 Matlabは部分的に「より良い」FORTRANとして開発されました。 – Marc

+5

コードは投稿するのに十分小さいですか? MEXに頼る前に、まだ他の最適化があるかもしれません。例えば。事前割り当てや関数呼び出しに注意することで、新しいMatlabsでインプレース配列の変更を行うことができます。これは反復計算の大きな成果です。 –

+1

この暖かい議論が彼を恐れていないことを望みます:) – Amro

答えて

8

構文がより寛容であり、ほぼすべてのコンパイラがそれをサポートするように、私は現代のFortranを少なくとも90/95で使用することをお勧めします。

Macでは、gfortranをhereからお勧めします。最新のバージョンではありませんが、アップルのビルドツール(Mac OS DVDからXcodeをインストールする必要があります)とうまく統合され、うまく機能します。多くのFortran拡張機能に依存する数値的なPythonコミュニティでは、このビルドを強くお勧めします。

私はfortran mexをMacで実際に使用していませんが、mexのドキュメントに従うとかなり簡単だと思います.MatlabからFortranにコードを翻訳するとあまりにも悪くないはずですMatlab関数の呼び出しを避けることができますが、Fortranには分かりやすいスライシングと配列アクセスがあります)。

+0

コメント無しDownvote?私は質問に答えたと思う... – robince

+0

+1 downvoteに対抗する。私はアドバイスが良いと思う(かなり多くのことを言っていた)、ここでは一部の人だけがいくつかの言語を好まないので、ダウンフォート(推測)。 – Rook

0

まあ、あなたはすでに解決策を見つけたでしょう。しかし、私はこれを言うでしょう:Matlabはますます高速化しています。しかし、MatlabのJITをフルに活用することは、時には直感的ではありません。 Mathworksはコードの速度をベクトル化すると言っていました。その後、明示的なループですべてを書きます。私は実際には現在のベストプラクティスが何であるかは分かりません。

私が言っていることは、あなたがfortranに行く前に、ベストプラクティスを見つけて実装することです。それはあなたにスピードアップの十分を与えるかもしれません。

また、減速をループに分離していることは間違いありませんか?プロファイラを使用していますか?あなたは経験したので、あなたはおそらく持っているでしょう。私はちょうど私がそれを言及すると思った。

幸運、 アリエル

関連する問題