Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Zhanghong_T_
Beginner
19 Views

crash when calling PARDISO

Hi all,

I calls the PARDISO solver in my program. It crashes when run to thisfunction and aDOS window pop-up:

system error(8): __kmp_create_monitor: CreateThread: Not enough storage is availableto process this command.

OMP abort: fatal system error detected.

What shouldI do to avoid this crash?

Thanks,

Zhanghong Tang

0 Kudos
3 Replies
jimdempseyatthecove
Black Belt
19 Views

Tang,

The likely cause for this is your application is allocating all of virtual memory to data structures prior to entering the first parallel region. Then when you enter your first parallel region there is no remaining memory to allocate to the new threads contexts. To resolve this try the following:

PROGRAM YourProgramNameHere
! Prior to allocating your allocatable arrays
! Insert something innocuous to initiate the OpenMP threads
!$OMP PARALLEL PRIVATE(I)
I=OMP_GET_THREAD_NUM()
!$OMP END PARALLEL
! Now allocate your allocatable arrays
...
END PROGRAM YourProgramNameHere

A second cause of the problem is if you link your program specifyingan overly large stack size. When you do this then each new thread created will also attempt to obtain the same overly large stack size. To correct for this make your stack size smaller. This may require you to use allocatable arrays in place of the large stack arrays that may exist in your program. Or using an option switch to request large stack based arrays be allocated on the heap:

/heap-arrays[:n]
Temporary arrays of minimum size n (in kilobytes) are
allocated in heap memory rather than on the stack
/heap-arrays- (DEFAULT) Temporary arrays are allocated on the stack
Jim Dempsey
Zhanghong_T_
Beginner
19 Views

Hi Jim,

Thank you very much for your reply.It just caused by a large stack size set in the project.ButI am stillnot very clear that whythe error message alwaysappears if I call the solver, no matter whether I specified /Qopenmp or not.

Thanks,

Zhanghong Tang

jimdempseyatthecove
Black Belt
19 Views

Tang,

Insert into the front of your PROGRAM

!$OMP PARALLEL PRIVATE(I)
I=OMP_GET_THREAD_NUM()
WRITE(*,*) 'Thread',I

!$OMP END PARALLEL

See if OpenMP starts and displays the list of thread numbers.

Set a break point on the statement _following_ the END PARALLEL

Click on Debug | Exceptions

Check everything in the Win32 exceptions (remember to uncheck later). Prior to checking you can Alt-PrintScreen with the check box window in focus then paste the image into Paint or WinWord. You can reference the image later to restore the check boxes to your prior settings.

With good fortune, the problem will trap into the debugger and you will have enough information to correct the problem.

Jim Dempsey