Я хочу использовать weave.blitz, чтобы улучшить производительность следующей Numpy коды:Blitz код производит различные выходные
def fastIteration(self):
g = self.grid
nx,ny = g.ux.shape
uxold = g.old_ux
ux = g.ux
ux[0:,1:-1] = uxold[0:,1:-1] + ReI* (uxold[0:,2:] - 2*uxold[0:,1:-1] + uxold[0:,0:-2])
g.setBC()
g.old_ux = ux.copy()
В этом коде г является расчетной сеткой. Которые состоят из двух разных полей ux и uxold. Старое просто используется для временного хранения переменных. В полном коде приблизительно 95% времени выполнения тратится на метод fastIteration, поэтому даже простое увеличение производительности уменьшит количество часов, затрачивающих значительное количество времени на выполнение этого кода.
Выхода методы Numpy выглядит так, как будто:
Как этот код мое узкое место Я хочу, чтобы улучшить скорость с помощью переплетения налеты. Этот метод выглядит следующим образом:
def blitzIteration(self):
### does not work correct so far
g = self.grid
nx,ny = g.ux.shape
uxold = g.old_ux
ux = g.ux
expr = "ux[0:,1:-1] = uxold[0:,1:-1] + ReI* (uxold[0:,2:] - 2*uxold[0:,1:-1] + uxold[0:,0:-2])"
weave.blitz(expr, check_size=0)
g.setBC()
g.old_ux = ux.copy()
Однако это не дает правильный результат: (. Воспроизведенным, поданной и fixed Там больше информации о фактической ошибке там)
@jordeca: вот это: '$ питон blitz_bug.py' ' $ питон -c "импорт SciPy, печать SciPy .__ версия __" ' 0.13.0.dev-639ef30 ' $ питона - c "import numpy, print numpy .__ version __" ' 1.7.1 ' $ uname -a' Linux ratatoskr 2.6.32-45-generiC# 104-Ubuntu SMP Вт Фев 19 21:20:09 UTC 2013 x86_64 GNU/Linux –
@ Zhenya Спасибо! – jorgeca