- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page