Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29002 Discussions

Failure of Lapack when OpenMP directive Enabled

criswu
Novice
659 Views

 

    I build a project (vs2010 + IVF)  calling Lapack subroutines, but when I enable process OpenMP directives( Generate parallel code), and i encounted the 

Debug Assertion Failed!

File:f:\dd\vctools\crt_bld\self_x86\crt\src\winsig.c 

Line: 417

Expression:(" Invalid signal or error",0)

program main
implicit none

     integer,parameter:: NMAX = 4000
     integer,parameter:: LWORK = 100*NMAX
     integer IPIV(NMAX)  
     complex WORK(LWORK)
     INTEGER LDA, INFO

     INTEGER maxedge ,error,ii

    Complex ,allocatable:: cmtx(:,:),crhs(:)

    maxedge = 1396

    allocate(cmtx(maxedge,maxedge),crhs(maxedge),stat=error)
    if(error .ne. 0)then
         print *,'Allocate cmtx and crhs failure'
         stop
    endif
    cmtx = (0.0,0.0)
    do ii = 1,maxedge 
            cmtx(ii,ii) = (1.0,0.0)
    enddo 

    print *,'Start LU decompostion '

    LDA = maxedge
    call CGETRF(maxedge,maxedge,cmtx,LDA,IPIV,INFO)
    if( INFO .eq. 0)then
             call CGETRI(maxedge,cmtx,LDA,IPIV,WORK,LWORK,INFO)
             if(INFO .eq. 0) print *,'LU Success'
    else
        print *,'Lapack Factor failure'
       stop
    endif

     stop
end program

(Virus scan in progress ...)
0 Kudos
3 Replies
TimP
Honored Contributor III
659 Views

You leave us guessing here.  It may be useful to have a build log,  If you installed the MKL option and specified an option such as /Qmkl your lapack functions should be linked from MKL, and there should be no conflicts due to linking multiple OpenMP libraries.  Did you rebuild, all with debug build, after changing the option?

0 Kudos
criswu
Novice
659 Views

I attached my whole program, and i linked my functions wth \Qmkl and enabled the \Qopenmp, it encounts the same error. 

(Virus scan in progress ...)
0 Kudos
criswu
Novice
659 Views

By modifing

complex WORK(LWORK)

to 

complex,allocatable : WORK(:)

and the allocate the array WORK(LWORK) can fix this problem. 

0 Kudos
Reply