Page 1 of 1

What is the Complexity and Time of a Scalapack Routine ??

PostPosted: Thu May 08, 2008 12:42 pm
by arad
Hi guys

I need to estimate the time and the complexity (in Gflops) of the routine PDGEQRF that computes the QR factorization of a matrix. Is there any routine in Scalapack that gives me these results? any link that gives advices on this ?

Thank you !

PostPosted: Thu May 08, 2008 2:04 pm
by Julien Langou
No there is no routine in ScaLAPACK that gives you the complexity cost of
a routine. Nor in LAPACK.

To get them you can go and look in the LAPACK Users' Guide the Appendix
C: Operation Counts for the BLAS and LAPACK pp.118-123. In the case,
where m>=n the standard costs for PDGEQRF (you need to look at DGEQRF)
is 2mn^2-2/3n^3.

There are some timing utility in ScaLAPACK and LAPACK but they are
internal, to get the time of a ScaLAPACK routine use whatever parallel timer
you are used to.

PostPosted: Thu May 08, 2008 2:57 pm
by arad
thank you a lot

but i cant find this.. can u give me the link ?

thank you !

PostPosted: Thu May 08, 2008 3:07 pm
by Julie
Arad
Just take a look at the lawn 41 page 118.
http://www.netlib.org/lapack/lawnspdf/lawn41.pdf

For a complete list of the LAWNs, http://www.netlib.org/lapack/lawns/downloads/

Julie

PostPosted: Fri May 23, 2008 8:06 pm
by arad
Well I tried this in order to count the time required for running the QR routine of my program :

Code: Select all
       CALL CPU_TIME(T2)
       CALL PDGEQRF( M, N, A, IA, JA, DESCA, TAU, WORK, LWORK,
     $                    INFO )
       CALL CPU_TIME(T1)
       WRITE(*,*) ' TIME FOR QR =',T1-T2


is the routine CPU_TIME reliable for counting this way the time of the routine ? is there any better ?

Re: What is the Complexity and Time of a Scalapack Routine ??

PostPosted: Fri Aug 08, 2008 12:09 pm
by Julien Langou
To time a MPI routine, one pretty well accepted way to do is:
Code: Select all
MPI_Barrier /* so that every process enters the routine (almost) at the same time */
start_time
call routine
stop_time
MPI_Allreduce() /* to find the max time among all the processes */


By the way, another source to know the # of FLOPS of some LAPACK routines is dopla.f.
See Clint Whaley's post: http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=729

--julien