- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
G'day All,
The simple program enclosed seems to indicate a problem in ifort OpenMP compilation of parallel DO loop work-sharing directives that distributes increasing numbers of iterations instead of spreading them evenly amongst threads when the loop index variable 'I' is re-used in later loop statements inside a SINGLE directive. The problem does not occur when the program is modified to use a different variable 'J' instead for the 2nd loop. Nor does this problem occur in equivalent C code.
Am I doing something wrong or is this a bug? And, where/how should it be reported?
Regards,
Sam
Sam
Code:
$ cat incorrect.f PROGRAM MAIN INTEGER I, J, OMP_GET_THREAD_NUM, OMP_GET_NUM_THREADS !$OMP PARALLEL PRIVATE(I) !$OMP DO do I=1,OMP_GET_NUM_THREADS() PRINT *, 'TID =', OMP_GET_THREAD_NUM(), 'I =', I enddo !$OMP END DO !$OMP BARRIER !$OMP SINGLE do I=1,OMP_GET_NUM_THREADS() PRINT *, 'TID =', OMP_GET_THREAD_NUM(), 'I =', I enddo !$OMP END SINGLE !$OMP END PARALLEL END $ cat correct.f PROGRAM MAIN INTEGER I, J, OMP_GET_THREAD_NUM, OMP_GET_NUM_THREADS !$OMP PARALLEL PRIVATE(I) !$OMP DO do I=1,OMP_GET_NUM_THREADS() PRINT *, 'TID =', OMP_GET_THREAD_NUM(), 'I =', I enddo !$OMP END DO !$OMP BARRIER !$OMP SINGLE do J=1,OMP_GET_NUM_THREADS() PRINT *, 'TID =', OMP_GET_THREAD_NUM(), 'J =', J enddo !$OMP END SINGLE !$OMP END PARALLEL END $ uname -a Linux swan.ac3.com.au 2.4.21-sgi303r2 #1 SMP Mon Nov 29 15:29:38 PST 2004 ia64 i a64 ia64 GNU/Linux $ ifort -v Version 9.0 $ ifort -openmp incorrect.f -o incorrect incorrect.f(10) : (col. 6) remark: OpenMP DEFINED LOOP WAS PARALLELIZED. incorrect.f(9) : (col. 6) remark: OpenMP DEFINED REGION WAS PARALLELIZED. $ echo $OMP_NUM_THREADS 8 $ ./incorrect TID = 0 I = 1 TID = 2 I = 1 TID = 2 I = 2 TID = 2 I = 3 TID = 1 I = 1 TID = 1 I = 2 TID = 7 I = 1 TID = 7 I = 2 TID = 7 I = 3 TID = 7 I = 4 TID = 7 I = 5 TID = 7 I = 6 TID = 7 I = 7 TID = 7 I = 8 TID = 3 I = 1 TID = 3 I = 2 TID = 3 I = 3 TID = 3 I = 4 TID = 4 I = 1 TID = 4 I = 2 TID = 4 I = 3 TID = 4 I = 4 TID = 4 I = 5 TID = 5 I = 1 TID = 5 I = 2 TID = 5 I = 3 TID = 5 I = 4 TID = 5 I = 5 TID = 5 I = 6 TID = 6 I = 1 TID = 6 I = 2 TID = 6 I = 3 TID = 6 I = 4 TID = 6 I = 5 TID = 6 I = 6 TID = 6 I = 7 TID = 4 I = 1 TID = 4 I = 2 TID = 4 I = 3 TID = 4 I = 4 TID = 4 I = 5 TID = 4 I = 6 TID = 4 I = 7 TID = 4 I = 8 $ ifort -openmp correct.f -o correct correct.f(7) : (col. 6) remark: OpenMP DEFINED LOOP WAS PARALLELIZED. correct.f(6) : (col. 6) remark: OpenMP DEFINED REGION WAS PARALLELIZED. $ ./correct TID = 1 I = 2 TID = 0 I = 1 TID = 2 I = 3 TID = 6 I = 7 TID = 3 I = 4 TID = 7 I = 8 TID = 4 I = 5 TID = 5 I = 6 TID = 4 J = 1 TID = 4 J = 2 TID = 4 J = 3 TID = 4 J = 4 TID = 4 J = 5 TID = 4 J = 6 TID = 4 J = 7 TID = 4 J = 8 $
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm not familiar with the issues so can't comment on your code, but one reports issues through Intel Premier Support. See this page to get started.
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