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.