[petsc-users] Petsc messing with OpenMP

Smith, Barry F. bsmith at mcs.anl.gov
Tue Jan 30 11:02:08 CST 2018

  I don't know what you are trying to do with OpenMP and PETSc, nor do I understand why anyone would use OpenMP, but you cannot call virtually any PETSc function or operation while you are using threads. 

  Best to use PETSc as intended, with one MPI process per core or hardware thread and not use OpenMP at all. http://www.mcs.anl.gov/petsc/miscellaneous/petscthreads.html


> On Jan 30, 2018, at 10:57 AM, Timothée Nicolas <timothee.nicolas at gmail.com> wrote:
> Dear petsc team,
> For a while, I have been wondering why I have never managed to print what threads are doing in an openMP region in my FORTRAN programs. Some people told me it was normal because threads will get confused all trying to write at the same time. However I realised today that the problem seems to be related to petsc. I have a super simple "hello world" example that reproduces the problem : 
> program hello
>   !$ use omp_lib
>   implicit none
>   integer nthreads, tid
>   !$omp parallel private(nthreads, tid)
>   tid = omp_get_thread_num()
>   print *, 'hello world from thread = ', tid
>   if (tid .eq. 0) then
>      nthreads = omp_get_num_threads()
>      print *, 'number of threads = ', nthreads
>   end if
>   !$omp end parallel
> end program hello
> If I compile it with
> mpif90 -qopenmp -o omp main.f90
> Then I get no problem. But if I link petsc library (as is the case in my code) :
> mpif90 -qopenmp -o omp main.f90 -L/home/timotheenicolas/petsc-3.7.3/arch-linux2-c-debug/lib -lpetsc
> Then I get the following error after execution of export OMP_NUM_THREADS=2;./omp
>  hello world from thread =            0
>  number of threads =            2
> forrtl: severe (40): recursive I/O operation, unit -1, file unknown
> Image              PC                Routine            Line        Source             
> omp                0000000000403BC8  Unknown               Unknown  Unknown
> omp                0000000000403572  Unknown               Unknown  Unknown
> libiomp5.so        00002AAAAD3146A3  Unknown               Unknown  Unknown
> libiomp5.so        00002AAAAD2E3007  Unknown               Unknown  Unknown
> libiomp5.so        00002AAAAD2E26F5  Unknown               Unknown  Unknown
> libiomp5.so        00002AAAAD3149C3  Unknown               Unknown  Unknown
> libpthread.so.0    00002AAAAD5BADC5  Unknown               Unknown  Unknown
> libc.so.6          00002AAAAD8C5CED  Unknown               Unknown  Unknown
> This means that in my programs using petsc, I can't use prints to see exactly what the threads are doing, which is a pain when debug is required (that is to say, all the time). Is this issue expected ?
> Thx in advance
> Timothee NICOLAS

More information about the petsc-users mailing list