[SciPy-user] LU: linalg.solve vs. dgetrf/dgetrs fortran subroutines
fred
fredmfp at gmail.com
Mon Jul 9 14:32:12 EDT 2007
Hi,
I want to compare execution times between linalg.solve from scipy
and dgetrf/dgetrs fortran subroutines (before using cvxopt...)
Here my functions:
def calc_KW_LU(self, KV):
from scipy.linalg import solve
from sys import stdout
t0 = time.time()
print 'Computing kriging weights (scipy LU version)...',
stdout.flush()
KW = solve(self.KM, KV)
self.KW = KW[:-1].squeeze()
print '('+str(time.time()-t0)+' s)',
print 'done !'
stdout.flush()
subroutine calc_KW(KW, KM, KV, nbx, nby, nbz)
implicit none
!f2py real intent(in, out) :: KW
!f2py real*8 intent(in) :: KM, KV
!f2py integer intent(in) :: nbx, nby, nbz
integer :: nbx, nby, nbz
real :: KW((2*nbx+1)*(2*nby+1)*(2*nbz+1))
real*8 :: KM((2*nbx+1)*(2*nby+1)*(2*nbz+1)+1, (2*nbx+1)*(2*nby+1)*(2*nbz+1)+1)
real*8 :: KV((2*nbx+1)*(2*nby+1)*(2*nbz+1)+1)
integer :: ndim
integer :: info
integer, dimension(:), allocatable :: ipvt
ndim = (2*nbx+1)*(2*nby+1)*(2*nbz+1)+1
allocate(ipvt(ndim))
call dgetrf(ndim, ndim, KM, ndim, ipvt, info)
call dgetrs('N', ndim, 1, KM, ndim, ipvt, KV, ndim, info)
KW = KV(1:size(KV)-1)
end subroutine calc_KW
This last is called by my python method:
def calc_KW_LU_Fmodule(self, KV):
from scipy import float32, zeros
from sys import stdout
from calc_KW_LU import calc_kw
t0 = time.time()
nbx, nby, nbz = self.nbx, self.nby, self.nbz
ndx, ndy, ndz = (2*nbx+1), (2*nby+1), (2*nbz+1)
ndt = ndx*ndy*ndz
KM, KV = self.KM, self.KV
print 'Computing kriging weights (LU Fortran module version)...',
stdout.flush()
KW = zeros((ndt,1), dtype=float32)
KW = calc_kw(KW, KM, KV, nbx, nby, nbz)
self.KW = KW.squeeze()
print '('+str(time.time()-t0)+' s)',
print 'done !'
stdout.flush()
The execution times are very different:
1) On my Core 2 Duo T7200 (i686, Debian etch):
Computing kriging weights (LU version)... (142.409274817 s) done !
Computing kriging weights (LU Fortran module version)... (157.362993002 s) done !
2) On my Pentium 930 D (x86_64, Debian etch), differences are bigger:
Computing kriging weights (LU version)... (283.214334011 s) done !
Computing kriging weights (LU Fortran module version)... (583.182439089 s) done !
Could someone give me any clues ?
TIA.
Cheers,
--
http://scipy.org/FredericPetit
More information about the SciPy-User
mailing list