6.3.1 C*$* assert concurrent call

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


Caution
The 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.


Previous Page | Next Page | Contents | Index |
Command-Line Qualifiers