The OpenMP parallelisation is done for a DO loop inside which various
subroutine calls are made. If for eg. I pass around 50 variables as
arguments for this routine, some of the arguments are not passed to the
called routine. Generally, as I notice, only 2 contiguous variables are
not getting passed (12th and 13th (or) 15th and 16th). Other variables
gets passed properly.
C$OMP PARALLEL
C$OMP& PRIVATE( A, B, C)
C$OMP& SHARED(X, Y, Z)
C$OMP DO
DO I = 1,100
CALL FUNCTION1( A, X, B, Z, Y)
CALL FUNCTION2( Z, Y)
CALL FUNCTION3( A, Z, Y)
END DO
C$OMP END DO
C$OMP END PARALLEL
For eg. as in the above case of call to function1( ), variables X and B
are not passed for example. With the same 'exe', some times B and Z are
not passed ". The variables that are not passed is generally private
which may be a scalar/ vector.
I mean "not passed" as : The debugger stops at this point where it
encounters this variable for the first time in the computatioin.
For example, inside function1
IF ( X(1) .EQ. 0 )
the computation stops when X is used for the first time. There is no
memory address shown for X in the debugger's memory dialogue box.
The compiler and debugger : pgf90 and pgdbg
in Linux platform with AMD opteron processors.
Note: The code runs in 2 processors.