Presumably, some prior analysis has determined that in the following the ``i'' loop must be serialized and that the ``j'' loop is concurrent. Supposedly also, the variable ``ib'' in the inner loop is known to only take value between 50 and 60.
------- Sample File ------------------------------------------------------------ subroutine dircheck( a, ia, b, ib, c ) integer ia, ib real a(100), b(100), c(100) CSRD$SERIAL do i = 1, 40 a( i ) = a( i + ia ) + c( i ) CSRD$PARALLEL do j = 1, 40 CSRD$INRANGE ib( 50, 60 ) b( j ) = b( j + ib ) + c( i ) call ccc( b ) enddo enddo return end ------- End of Sample File -----------------------------------------------------
Beginning of resulting .out file for command line: kap -cust=sgi <filename>
------- .out File (partial) ---------------------------------------------------- KAP/Polaris 0.1 k220203 940609 DIRCHECK Source 09-Jun-1994 09:22:50 Page 1 Footnotes Actions DO Loops Line 1 subroutine dircheck( a, ia, b, ib, c ) 2 integer ia, ib 3 real a(100), b(100), c(100) 4 DIR 5 CSRD\$SERIAL 1 NO +--------- 6 do i = 1, 40 ! 7 a( i ) = a( i + ia ) + c( i ) ! 8 DIR ! 9 CSRD\$PARALLEL 2 INF C !+-------- 10 do j = 1, 40 !* 11 3 4 INF !* 12 CSRD\$INRANGE ib( 50, 60 ) !* 13 DIR INF !* 14 b( j ) = b( j + ib ) + c( i ) 5 INF !* 15 call ccc( b ) !*________ 16 enddo !_________ 17 enddo 18 19 return 20 end Abbreviations Used NO not optimized DIR directive INF informational C concurrentized Footnote List 1: not optimized Loop was asserted serial by directive. 2: informational Dependences for B are ignored in this loop. 3: informational Assumed relation: "IB .LE. 60". 4: informational Assumed relation: "IB .GE. 50". 5: informational Call is assumed to be concurrent. KAP/Polaris 0.1 k220203 940609 DIRCHECK Loop Summary 09-Jun-1994 09:22:50 Page 2 Loop Summary From To Loop Loop at Loop# line line label index nest Status 1 6 17 Do I 1 scalar directive 2 10 16 Do J 2 concurrentized ------- End of .out File (partial) ---------------------------------------------
Resulting .cmp file for command line: kap -cust=sgi <filename>
------- .cmp File -------------------------------------------------------------- SUBROUTINE DIRCHECK (A, IA, B, IB, C ) INTEGER IA, IB REAL A(100), B(100), C(100) CSRD$SERIAL DO I=1,40 A(I) = A(I+IA) + C(I) CSRD$PARALLEL C$DOACROSS SHARE(B,IB,I,C),LOCAL(J) DO 2 J=1,40 B(J) = B(J+IB) + C(I) CALL CCC (B) 2 CONTINUE END DO RETURN END ------- End of .cmp File -------------------------------------------------------
Resulting .cmp file for command line: kap -cust=pcf <filename>
------- .cmp File -------------------------------------------------------------- SUBROUTINE DIRCHECK (A, IA, B, IB, C ) INTEGER IA, IB REAL A(100), B(100), C(100) CSRD$SERIAL C*KAP* PARALLEL REGION SHARED (B,IB,C,A,IA) LOCAL (I,J) DO I=1,40 C*KAP* ONE PROCESSOR SECTION A(I) = A(I+IA) + C(I) C*KAP* END ONE PROCESSOR SECTION CSRD$PARALLEL C*KAP* PARALLEL DO DO 2 J=1,40 B(J) = B(J+IB) + C(I) CALL CCC (B) 2 CONTINUE C*KAP* END PARALLEL DO NOWAIT C*KAP* BARRIER END DO C*KAP* END PARALLEL REGION RETURN END ------- End of .cmp File -------------------------------------------------------