Python中的数值线性代数工具

Python中的数值线性代数工具,python,numpy,scipy,linear-algebra,instrumentation,Python,Numpy,Scipy,Linear Algebra,Instrumentation,我用numpy表示数值线性代数。例如,我怀疑,如果我在执行某些计算的方式上做一些小的修改,使它们更高效地使用内存,我可以获得更好的性能 我想知道python中是否有任何形式的工具可用于检测缓存和TLB未命中。有一个非常好的api,PAPI,我在最近的一个课程中学习过,但它没有Python接口: 另外,一般来说,有没有一种好的方法来评测numpy或其他python数字代码?timeit模块很难集成到代码中。mpi4py有一种使用MPE库进行概要分析的好方法。演示代码(demo/mpe loggi

我用numpy表示数值线性代数。例如,我怀疑,如果我在执行某些计算的方式上做一些小的修改,使它们更高效地使用内存,我可以获得更好的性能

我想知道python中是否有任何形式的工具可用于检测缓存和TLB未命中。有一个非常好的api,PAPI,我在最近的一个课程中学习过,但它没有Python接口:

另外,一般来说,有没有一种好的方法来评测numpy或其他python数字代码?timeit模块很难集成到代码中。mpi4py有一种使用MPE库进行概要分析的好方法。演示代码(demo/mpe logging/cpilog.py)中的一个片段:

将创建一个可以以图形方式显示的日志文件。但这有点MPI特定


谢谢。

也许提供的探查器之一可以帮助您找到热点


这些可能不会提供足够的细节来触发直接行动,但应该指出在哪里寻求改进,并帮助确定收益递减的点。

罗伯特·克恩(NumPy开发者之一)正是针对这种情况编写的。与hotspot/cProfile相比,它更适合评测NumPy重代码。

谢谢,这非常有帮助。在问题的“更好的性能”部分,您实际上在做什么——什么NumPy函数,什么vec/数组大小,什么缓存大小?大多是密集矩阵乘以从缓存大小到更大的矩阵大小。
communication   = MPE.newLogState("Comunicate",  "red")
with communication:
    comm.Bcast([n, MPI.INT], root=0)