3

numpy と scipy を使用した Python のプログラムがあります。データ型に多くの変更があるため、そこに cython を追加するには時間がかかります

その cprofile は次のようになります: http://imgur.com/a/Sgvof

ほとんどの時間 (73% ) は<scipy.integrate_odepack.odeint> 私の質問で使い果たされています。この関数は、この例では ~10^6 回呼び出されます。もしそうなら、どのくらいのスピードアップが期待できますか? 速度が少なくとも 4 倍から 5 倍になる場合は、これを追求することを検討します

ノート:

提供された情報が不十分な場合は、以下にコメントしてください。喜んで提供します

ありがとうございました

4

2 に答える 2

3

時間の半分は<scipy.integrate_odepack.odeint>内部で費やされてdx_dvおり、dx_duこれらはPython関数のように見えます。これらは、特に複雑な場合にターゲットにできる関数です。

心に留めておくべきことの1つは、減速がその時の理由だけである場合、calling overhead * number of calls私は物事があまり改善されることを期待しないだろうということです。そのオーバーヘッドは消えることはなく、実際にはもっと複雑になる可能性があります。SciPy C-> Pythonの代わりに、SciPy C->Python->Cを実行します。

于 2012-05-04T14:49:42.497 に答える
3

改善が (あったとしても) あまり見られない可能性があります。SciPy (そして、あなたが最も興味を持っているコードをもっと具体的に言えばodeint) は、単なる python ではなく、すでに CPython モジュール (Fortran で書かれている) です。

これが python のみの関数呼び出しである場合、Cython で記述すると (本格的な CPython モジュールを記述するよりも簡単ですが、個人的には ac または c++ dll を記述し、ctypes を使用して呼び出します...)、パフォーマンス。しかし、おそらくこの状況ではありません。

于 2012-05-04T11:31:00.783 に答える