2010-06-19 3 views
2

Я использую numpy для числовой линейной алгебры. Я подозреваю, что могу добиться гораздо большей производительности, если внес небольшие изменения в то, как я выполняю определенные вычисления, чтобы они, например, были более эффективными с точки зрения памяти.Инструментарий для числовой линейной алгебры в Python

Мне было интересно, существует ли какая-либо форма инструментария, доступная в python для обнаружения кеша и пропусков TLB. Существует очень хороший апи, PAPI, что я узнал о в недавнем классе, но это не имеет интерфейс Python:

http://icl.cs.utk.edu/papi/overview/index.html

Кроме того, есть хороший способ в целом к ​​профилю NumPy или другой числовой код python? Модуль timeit трудно интегрировать в код. mpi4py имеет хороший способ профилирования с использованием библиотеки MPE. Отрывок из демо-кода (демо/MPE-каротаж/cpilog.py):

communication = MPE.newLogState("Comunicate", "red") 
with communication: 
    comm.Bcast([n, MPI.INT], root=0) 

файл журнала создается, который может отображаться в графическом виде. Но это немного MPI.

Спасибо.

+0

В разделе «лучшая производительность» вашего вопроса что вы на самом деле делаете - какие функции numpy, какие размеры vec/array, размер кеша? – denis

+0

Масштабируемая матрица умножается на размеры матриц от размера кеша до гораздо большего. – Paul

ответ

1

Роберт Керн (один из разработчиков NumPy) написал line_profiler именно для этого сценария. Он больше подходит для профилирования кода NumPy-heavy, чем hotspot/cProfile.

+0

Спасибо, это очень полезно. – Paul

1

Возможно, один из предоставленных профилографов может помочь вам найти горячие точки?

см profiling python

Они будут, вероятно, не дают достаточно подробно, чтобы вызвать прямое действие, но следует указать, где искать улучшения и помогают определить точку убывающего.

Смежные вопросы