Intel® Moderncode for Parallel Architectures
Support for developing parallel programming applications on Intel® Architecture.

I/O operation conflicts with a prior I/O operation

jordimp
Beginner
278 Views
Hi all,

I am checking a Fortran90 parallel code with the Intel Thread Checker, and I get these two similar error statements:
6 | I/O data-race | Error | 3 | omp parallel region |I/O operation at "deriv_mb_redimen.f90":1210 conflicts with a prior I/O operation at region "deriv_mb_redimen.f90":1210 | "deriv_mb_redimen.f90":1210 | "deriv_mb_redimen.f90":1210
7 | I/O data-race | Error | 3 | omp parallel region |I/O operation at "deriv_mb_redimen.f90":1242 conflicts with a prior I/O operation at region "deriv_mb_redimen.f90":1210 | "deriv_mb_redimen.f90":1210 | "deriv_mb_redimen.f90":1242

Both offending lines (1210 and 1242) are inside an !$OMP PARALLEL/!$OMP END PARALLEL region and they are
** code: **
!$OMP END DO ! this is line 1210
write(*,*) ' enddo' ! this I have to check where I am during debugging

.... ! a few deallocate(...) here

write(*,*) ' all deallocated' !this is line 1242

!$OMP END PARALLEL
** end code **

I am a bit confused, especially in relation to line 1210, which contains a simple (?) !$OMP END DO.
As they are qualified as Error by Thread Checker I thought I should better find out what is happening, so any help will be appreciated.

This code is part of a subroutine that is called several times by the main code. Only the subroutine has OpenMP features, but I compiled everything with the same flags:
ifort -check all,noarg_temp_created -axT -ipo -traceback -i-static -fpstkchk -g -tcheck -openmp

Please, note that I am quite a newbie in parallel programming, so excuse me if this is a silly question, but I could not find information on the forums (or elsewhere) about this particular error message.
0 Kudos
1 Solution
TimP
Honored Contributor III
278 Views
If you have writes by multiple threads using the same unit, you must make it a critical region. If you do that, which order the threads put data is indeterminate, but at least all threads should succeed, without depending on the run time library implementing its own critical. $OMP END DO is redundant (the standard Fortran end do takes care of it), so there is little reason for thread checker to attempt prettiness when it appears to be closely associated with a flagged problem.
-tcheck over-rules several, maybe all, of the options you have specified.

View solution in original post

0 Kudos
1 Reply
TimP
Honored Contributor III
279 Views
If you have writes by multiple threads using the same unit, you must make it a critical region. If you do that, which order the threads put data is indeterminate, but at least all threads should succeed, without depending on the run time library implementing its own critical. $OMP END DO is redundant (the standard Fortran end do takes care of it), so there is little reason for thread checker to attempt prettiness when it appears to be closely associated with a flagged problem.
-tcheck over-rules several, maybe all, of the options you have specified.

0 Kudos
Reply