- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I was trying to solve some linear systems involving dense diagonally-dominant matrices with ScaLAPACK's PDDBSV routine. The code is listed below. I used ifort 10.1.018 and MKL 10.0.5.025 to compile the program and ran it under MPICH2 1.0.7 on a Q6600 Linux machine. The compiler flags were "-xT -O3 -g -lmkl_scalapack -lmkl_lapack -lmkl_blacs_intelmpi20_lp64 -lmkl -openmp". Every time I ran it, it crashed with the message "forrtl: severe (71): integer divide by zero". According to the crash address, it seemed that the division occurred in the PDDBTRF routine.
I have checked the code back and forth against MKL's documentation and was unable to locate the cause of trouble. Am I missing anything?
PROGRAM PDDBSV_TEST
EXTERNAL BLACS_PINFO, BLACS_GET, BLACS_GRIDINIT, BLACS_GRIDINFO
EXTERNAL BLACS_EXIT
EXTERNAL DESCINIT, DGESD2D, DGERV2D, NUMROC
EXTERNAL PDDBSV, PDLANGE
INTEGER NUMROC
DOUBLE PRECISION PDLANGE
INTEGER MYPNUM, NPROCS
INTEGER NPROW, NPCOL
INTEGER MYPROW, MYPCOL
INTEGER PROW, PCOL
INTEGER ICONTXT
INTEGER N, NRHS, MB, NB, BWL, BWU, BWM, LWORK
PARAMETER(N = 64, NRHS = 1, MB = 4, NB = 4)
PARAMETER(BWL = N - 1, BWU = N - 1, BWM = MAX(BWL, BWU))
PARAMETER(LWORK = NB * (BWL + BWU)
> + BWM * (6 * BWM + MAX(BWM, NRHS)))
DOUBLE PRECISION, ALLOCATABLE :: A(:, :)
DOUBLE PRECISION, ALLOCATABLE :: B(:, :)
DOUBLE PRECISION, ALLOCATABLE :: SENDBUF(:, :), WORK(:)
DOUBLE PRECISION NORM
INTEGER DLEN_
PARAMETER(DLEN_ = 9)
INTEGER DESCA(DLEN_), DESCB(DLEN_)
INTEGER NAROW, NACOL, NBROW, NBCOL
INTEGER NXROW, NXCOL
INTEGER INFO
INTEGER I, J, IGLB, JGLB
NPROW = 2
NPCOL = 2
CALL BLACS_PINFO(MYPNUM, NPROCS)
CALL BLACS_GET(0, 0, ICONTXT)
CALL BLACS_GRIDINIT(ICONTXT, 'R', NPROW, NPCOL)
CALL BLACS_GRIDINFO(ICONTXT, NPROW, NPCOL, MYPROW, MYPCOL)
IF ((MYPROW .LT. 0) .OR. (MYPROW .GE. NPROW)) GOTO 999
IF ((MYPCOL .LT. 0) .OR. (MYPCOL .GE. NPCOL)) GOTO 999
NAROW = NUMROC(N, MB, MYPROW, 0, NPROW)
NACOL = NUMROC(N, NB, MYPCOL, 0, NPCOL)
NBROW = NAROW
NBCOL = NUMROC(NRHS, MB, MYPCOL, 0, NPCOL)
ALLOCATE(A(MAX(NAROW, BWL + BWU + 1), MAX(NACOL, 1)))
ALLOCATE(B(MAX(NBROW, NB), MAX(NBCOL, 1)))
ALLOCATE(WORK(LWORK))
CALL DESCINIT(DESCA, N, N, MB, NB, 0, 0, ICONTXT,
> MAX(NAROW, BWL + BWU + 1), INFO)
CALL DESCINIT(DESCB, N, NRHS, MB, NB, 0, 0, ICONTXT,
> MAX(NBROW, NB), INFO)
! MATRIX CREATION & DISTRIBUTION CODE GOES HERE
CALL PDDBSV(N, BWL, BWU, NRHS, A, 1, DESCA, B, 1, DESCB, WORK,
> LWORK, INFO)
DEALLOCATE(A)
DEALLOCATE(B)
DEALLOCATE(WORK)
999 CONTINUE
CALL BLACS_EXIT(0)
END
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There seems to be neither a libmkl_scalapack_core.a nor a libmkl_blacs_intel20.a. I substituted libmkl_scalapack.a and libmkl_blacs_intelmpi20_lp64.a for them. The program still crashed with the same error message.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I dont think this is a linking error.
I would check all the parameters once again.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
At the first glance all are Ok with your code and probably this is really issue with MKL.
I would recommend you submit the issue against MKL to Premier support( https://premier.intel.com/ )
--Gennady
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page