The C*$* assert concurrent call assertion tells KAP
the subroutine calls and function references in the loop immediately
following this assertion can execute in parallel. It causes KAP to
ignore all potential data dependencies due to subroutine arguments.
This assertion does not apply to nested or surrounding loops.
The following code example shows how C*$* assert concurrent
call works:
C*$* ASSERT CONCURRENT CALL
DO 10 I=..
...
CALL S1
...
10 CONTINUE
You can use C*$* assert concurrent call to override
default preprocessor action. In the following code example,
C*$* assert concurrent call tells the compiler it is
safe to make a parallel call to TEST. Another assertion, C*$*
assert prefer do (concurrent) , tells the compiler to
"prefer" a reordered loop nesting that causes parallel execution
over the J loop.
C*$* ASSERT CONCURRENT CALL
C*$* ASSERT PREFER DO (CONCURRENT)
DO J = 1,N,64
DO K = 1,N,64
DO I = 1,N,64
CALL TEST('N','N',
& MIN0(64, N-I+1),MIN0(64,N-J+1),MIN0(64,N-K+1),
& 1.0D0,
& A(I,K),N+1,
& B(K,J),N+1,
& 1.0D0,
& C(I,J),N+1
& )
ENDDO
ENDDO
ENDDO
C*$* assert
concurrent call assertion tells KAP to assume that all
external subroutine/function calls are thread-reentrant. This will
override KAP default behavior, which is to assume that all external
subroutines/functions are NOT thread-reentrant or thread-safe. If
the external subroutine/functions are not thread-safe, and you use
C*$* assert concurrent call , your program may not
execute correctly. For example, local variables in subroutines are
thread-safe only if they are stored as thread-specific data. See the
Guide to DECthreads for further information on thread-safe
subroutines.
For further information about C*$* assert prefer do
(concurrent) , see Section 6.3.5.
KAP does not generate parallel code if you use the
/noconcurrentize command qualifier.