- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
is it possible to call the PARDISO solver within an OpenMP
parallel region? I want to do something like
!$omp parallel
call mysubroutine(...)
!$omp end parallel
subroutine mysubroutine(...)
...
!$omp single
call omp_set_num_threads(nthreads)
call pardiso(...)
!$omp end single
...
end subroutine mysubroutine
However, within the pardiso solver, the program justs stalls when
the number of threads is greater than one. The call to omp_set_num_threads
doesn't have any effect. What can I do?
is it possible to call the PARDISO solver within an OpenMP
parallel region? I want to do something like
!$omp parallel
call mysubroutine(...)
!$omp end parallel
subroutine mysubroutine(...)
...
!$omp single
call omp_set_num_threads(nthreads)
call pardiso(...)
!$omp end single
...
end subroutine mysubroutine
However, within the pardiso solver, the program justs stalls when
the number of threads is greater than one. The call to omp_set_num_threads
doesn't have any effect. What can I do?
Link Copied
3 Replies
- 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
Thanks for the link.
I have successfully called omp_set_nested(.true.) to enable nesting.
However, PARDISO always stalls (at 0% cpu usage) when it's called
within an active parallel region:
call omp_set_nested(.true.)
print*,omp_get_nested() ! returns true
!$omp parallel
!$omp single
call pardiso(...) ! stalls
!$omp end single
!$omp end parallel
I also tried to start a single PARDISO thread, e.g.
call omp_set_nested(.true.)
print*,omp_get_nested() ! returns true
!$omp parallel
!$omp single
call omp_set_num_threads(1)
!... set pardiso number of threads, iparm(3)=1
call pardiso(...)
!$omp end single
!$omp end parallel
Even this call stalls when the number of outer threads>1 just like in
the non-nested case:
call omp_set_nested(.false.)
!$omp parallel
!$omp single
!... set pardiso number of threads, iparm(3)=1
call pardiso(...) ! stalls
!$omp end single
!$omp end parallel
Creating a thread pool of 2x the number of logical processors or invoking
KMP_BLOCKTIME as described in the other forum thread also didn't help.
Is there something special about PARDISO?
I have successfully called omp_set_nested(.true.) to enable nesting.
However, PARDISO always stalls (at 0% cpu usage) when it's called
within an active parallel region:
call omp_set_nested(.true.)
print*,omp_get_nested() ! returns true
!$omp parallel
!$omp single
call pardiso(...) ! stalls
!$omp end single
!$omp end parallel
I also tried to start a single PARDISO thread, e.g.
call omp_set_nested(.true.)
print*,omp_get_nested() ! returns true
!$omp parallel
!$omp single
call omp_set_num_threads(1)
!... set pardiso number of threads, iparm(3)=1
call pardiso(...)
!$omp end single
!$omp end parallel
Even this call stalls when the number of outer threads>1 just like in
the non-nested case:
call omp_set_nested(.false.)
!$omp parallel
!$omp single
!... set pardiso number of threads, iparm(3)=1
call pardiso(...) ! stalls
!$omp end single
!$omp end parallel
Creating a thread pool of 2x the number of logical processors or invoking
KMP_BLOCKTIME as described in the other forum thread also didn't help.
Is there something special about PARDISO?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Please be sure that diferent threads use diferent ipram's because they are supposed to be private
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page