Failure of Lapack when OpenMP directive Enabled

Failure of Lapack when OpenMP directive Enabled

 

    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

AttachmentSize
Downloadapplication/octet-stream source1.f902.68 KB
4 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

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?

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

Attachments: 

AttachmentSize
Downloadapplication/zip mkl-lapack-test.zip1 MB

By modifing

complex WORK(LWORK)

to 

complex,allocatable : WORK(:)

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

Leave a Comment

Please sign in to add a comment. Not a member? Join today