- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
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.
1 Solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
-tcheck over-rules several, maybe all, of the options you have specified.
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
-tcheck over-rules several, maybe all, of the options you have specified.
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