我有一个繁重的 Cython 函数,我正在尝试优化它。我正在根据以下教程进行分析http://docs.cython.org/src/tutorial/profiling_tutorial.html http://docs.cython.org/src/tutorial/profiling_tutorial.html。我的个人资料输出如下所示:
ncalls tottime percall cumtime percall filename:lineno(function)
1 7.521 7.521 18.945 18.945 routing_cython_core.pyx:674(resolve_flat_regions_for_drainage)
6189250 4.964 0.000 4.964 0.000 stringsource:323(__cinit__)
6189250 2.978 0.000 7.942 0.000 stringsource:618(memoryview_cwrapper)
6009849 0.868 0.000 0.868 0.000 routing_cython_core.pyx:630(_is_flat)
6189250 0.838 0.000 0.838 0.000 stringsource:345(__dealloc__)
6189250 0.527 0.000 0.527 0.000 stringsource:624(memoryview_check)
1804189 0.507 0.000 0.683 0.000 routing_cython_core.pyx:646(_is_sink)
15141 0.378 0.000 0.378 0.000 {_gdal_array.BandRasterIONumPy}
3 0.066 0.022 0.086 0.029 /home/rpsharp/local/workspace/invest-natcap.invest-3/invest_natcap/raster_utils.py:235(new_raster_from_base_uri)
11763 0.048 0.000 0.395 0.000 /usr/lib/python2.7/dist-packages/osgeo/gdal_array.py:189(BandReadAsArray)
具体来说,我对第 2 行和第 3 行调用感兴趣stringsource:323(__cinit__)
and stringsource:618(memoryview_cwrapper)
多次。谷歌显示了对内存视图的引用,尽管我静态输入 numpy 数组,但我没有在该函数中使用它。知道这些调用是什么以及我是否可以避免/优化它们吗?
好吧,事实证明我did有记忆视图。我正在调用一个内联函数,该函数将静态类型的 numpy 数组传递到内存视图,从而调用对 stringsource 的所有额外调用。将函数调用中的 memoryview 类型替换为 numpy 类型可以解决此问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)