Consider the following code fragment / loop:
INTEGER :: i, n REAL, DIMENSION(:,:), ALLOCATABLE :: A, B, C !HPF$ PROCESSORS, DIMENSION(10,10) :: P !HPF$ ALIGN (:,:) WITH A(:,:) :: B, C !HPF$ DISTRIBUTE (CYCLIC,CYCLIC) ONTO P :: A ! ! ... C, B, A and N set up somehow ! !HPF$ INDEPENDENT, NEW(i) DO j = LBOUND(A,1),UBOUND(A,1),1 DO i = LBOUND(A,2),UBOUND(A,2),1 IF (ABS(A(i,j)) .GE. 0.01) THEN A(i,j) = (B(i,j)*C(i,j)*n)/A(i,j) ENDIF END DO END DO
Since INDEPENDENT is rarely implemented, recode the loop as a call to a Fortran 90 extrinsic procedure (F90_LOCAL) in order to exploit parallelism.
State the interface as it would appear in the HPF calling program.