I have the following OpenMP Fortran95 test program called test.f90. PROGRAM test USE OMP_LIB, ONLY: OMP_SET_NUM_THREADS IMPLICIT NONE INTEGER, PARAMETER :: numthreds = 4 INTEGER, PARAMETER :: maxnumber = 12 INTEGER :: totalsum, add, number CALL OMP_SET_NUM_THREADS (numthreads) totalsum = 0 add = 1 !$OMP PARALLEL DO & !$OMP SCHEDULE(DYNAMIC,1) & !$OMP DEFAULT(SHARED) & !$OMP PRIVATE(number1, & number2) & !$OMP REDUCTION(+:totalsum) DO nunmber = 1, maxnumber totalsum = add + totalsum + number END DO !$OMP END PARALLEL DO WRITE (*,*) totalsum END PROGRAM test I try to compile it with the command "gfortran -fopenmp test.f90". The compiler returns with the following error message: test.f90:16.24: !$OMP PRIVATE(number1, & 1 Error: Syntax error in OpenMP variable list at (1) test.f90:17.16: number2) & 1 Error: Unclassifiable statement at (1) test.f90:18.8: !$OMP REDUCTION(+:totalsum) 1 Error: Unclassifiable OpenMP directive at (1) test.f90:24.23: !$OMP END PARALLEL DO 1 Error: Unexpectged !$OMP END PARALLEL DO statement at (1) It is clear that the erros are caused by the !$OMP PRIVATE line. It seems that a list of variables cannot be broken in two lines. Had I had !$OMP PRIVATE(number1,number2) & instead of the two lines connected with the & sign, I would have not had any compilation errors. I wanted to try breaking the line, though, because in my codes I have very long lists of private variables. In the previous compiler I used, namely Intel's ifort, I had no issues. Do you have any suggestions when it comes to long lists of private variables? Should I simply have several !$OMP PRIVATE ([var1],[var2],...,[varn]) lines each opening and closing the bracket? Thank you very much
(In reply to comment #0) > !$OMP PRIVATE(number1, & > number2) & > The compiler returns with the following error message: > !$OMP PRIVATE(number1, & > 1 > Error: Syntax error in OpenMP variable list at (1) How about adding a !$OMP at the beginning of the continuation line? Thus, try: !$OMP PRIVATE(number1, & !$OMP number2) &
I just tested with some other compilers: ifort accepts the invalid code, PathScale and Open64 show a similar syntax error as gfortran, and PGI has a somewhat more legible error message: PGF90-S-0155-Illegal continuation (test.f90: 17) For the correct syntax, cf. OpenMP spec at http://openmp.org/wp/openmp-specifications/
> !$OMP PRIVATE(number1, & > !$OMP number2) & It seems to work this way. thank you very much.
Yeah, see OpenMP 3.0, section 2.1.2 for details how OpenMP Fortran free form directives and their continuations look like.