0

Cython でいくつかのコードを最適化しようとしていますが、cProfileは十分な情報を提供していません。

プロファイリングをうまく行うには、多くのサブルーチン func2、func3、...、func40 を作成する必要がありますか?

に関数がありますが、多くの for ループと内部操作があることに注意してfunc1くださいmycython.pyx。しかし、cProfile はそれらのループの統計を教えてくれません。

     2009 function calls in 81.254 CPU seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000   81.254   81.254 <string>:1(<module>)
    2    0.000    0.000    0.021    0.010 blah.py:1495(len)
 2000    0.000    0.000    0.000    0.000 blah.py:1498(__getitem__)
    1    0.214    0.214    0.214    0.214 mycython.pyx:718(func2)
    1   80.981   80.981   81.216   81.216 mycython.pyx:743(func1)
    1    0.038    0.038   81.254   81.254 {mycython.func1}
    2    0.021    0.010    0.021    0.010 {len}
    1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
4

2 に答える 2

4

はい、そうです。に利用できる最も細かい粒度cProfileは、関数呼び出しです。func1を複数の関数に分割する必要があります。(これらをfunc1内で定義された関数にして、func1でのみ使用できるようにすることができることに注意してください。)

よりきめ細かいプロファイリング(ラインレベル)が必要な場合は、別のプロファイラーが必要です。このラインレベルのプロファイラーを見てください。ただし、Cythonでは機能しないと思います。

于 2012-06-12T21:48:17.127 に答える
4

Cython コードのプロファイリング サポートを有効にする必要があります。使用する

# cython: profile=True

http://docs.cython.org/src/tutorial/profiling_tutorial.html

于 2012-09-04T17:56:09.937 に答える