言語をテストするために、Julia の動きの渦を計算してプロットする簡単なプログラムを採用しました。また、特別な理由もなく Python で記述しました。
(免責事項:1.私が読んだstackoverflowのすべてのパフォーマンス比較は、包括的/正確/適切に書かれていない/関連性がないなどの理由で非難されます.-これが実際の比較であるふりをしているわけではありません。 2. Python が最適化され、Cython などで実装される可能性があることは知っていますが、それはこの議論の一部ではなく、Julia と Python の同等の機能の参照用にここにあるだけです。)
コードとパフォーマンス結果はgist で確認できます。
Julia のパフォーマンスは、Fortran よりも大幅に遅くなります。計算自体の実行にかかる時間は次のとおりです (50000 タイム ステップ)。
Fortran: 0.051s
Julia: 2.256s
Python: 30.846s
Julia は Fortran よりもはるかに遅く (~44 倍遅い)、ギャップは狭まりますが、10 倍の時間ステップで依然として有意です( 0.50s vs 15.24s
)。
これらの結果は、julia のホームページに表示されている結果とは大きく異なります。私は何を間違っていますか?Julia を修正して大幅に速くすることはできますか?
Julia Performance Tipsページと、Julia ホームページの比較の背後にあるコードをざっと読みましたが、修正すべき点は何もありません。
また興味深いことに、Julia は PyPlot の読み込みが非常に遅く ( 5secs
ish!!)、テキスト ファイルの読み取りは Python よりもはるかに遅いです。これらを改善するために何かできることはありますか?
上記の時間は、Julia と Python の読み込み時間を示していないことに注意してください。これは、AFAIK の計算にかかった生の時間です。コードを参照してください。fortran の場合はすべてです。いずれの場合も、速度を比較できるように、大まかにプロットをオフにしています。
コンピューター: Intel i7-3770、16GB RAM、SSD HD、OS: Ubuntu 13.10 64 ビット、Fortran: gfortran、GNU Fortran (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1、Julia: バージョン 0.3.0-prerelease+396 (2013-12-12 00:18 UTC)、コミット c5364db* (0 日古いマスター)、x86_64-linux-gnu、Python: 2.7.5+
アップデート:
Ivarne のアドバイスに基づいて、Julia スクリプトを書き直しました (上記の要旨で更新)。関数で単調な作業をカプセル化し、すべての型を宣言し、行列のさまざまな要素を必要に応じてさまざまな配列に分割します。(私は Float32 を試してみたので、かなりの数の場所に Float64 を含めましたが、ほとんどの場合はそうではありませんでした)。
結果は次のとおりです。
50,000
時間ステップ:
Fortran: 0.051s (entire programme)
Julia: raw calc.: 0.201s, calc. and return (?): 0.758s, total exec.: 6.947s
500,000
時間ステップ:
Fortran: 0.495s (entire programme)
Julia: raw calc.: 1.547s, calc. and return (?): 2.094s, total exec.: 8.521s
結論は:
ジュリアをかなりスピードアップできます。
Julia のパフォーマンスの測定方法によっては、Julia の見た目の速度に大きな影響を与える可能性があります。