Go to the previous, next section.

## SUIF Features

In the SUIF vs. KAP tables (see section Performance Results), many of the SUIF only loops are due to KAP parallelizing an outer loop while SUIF is parallelizing an inner loop. However, in some cases SUIF can parallelize loops that KAP cannot parallelize. One reason for this is that SUIF has stronger dependence analysis. For example, consider the following loop from the Perfect Club benchmark SDS.f:

```      DO 200 J = 1, NM1
JP1 = J + 1
DO 100 I = JP1, N
TEMP = A(I,J)
A(I,J) = A(J,I)
A(J,I) = TEMP
100      CONTINUE
200  CONTINUE
```

The SUIF dependence analyzer realizes that since the loop bounds are triangular, the accesses to `A(I,J)` and `A(J,I)` are independent. We are then able to parallelize the outer `DO 200 J` loop. KAP reports a data dependence, and will only parallelize the inner `DO 100 I` loop.

Another reason that SUIF manages to parallelize loops that KAP misses is due to reductions. SUIF's reduction analysis pass will find reductions over arrays, whereas KAP will only perform reductions over single locations. For example, consider the following loop (also from SDS.f):

```      DO 20 J = 1, NNPED
SUMNN = 0.
DO 10 IQ = 1, NQD
SUMNN = SUMNN + WTDET(IQ) * N(IQ,I) * N(IQ,J)
10       CONTINUE

DO 15 K = 1, 3
PU(K) = PU(K) + P(K,J) * SUMNN
15       CONTINUE
20   CONTINUE
```

SUIF parallelizes the outer `DO 20 J` by performing a reduction over the `PU` array. KAP is only able to parallelize the inner `DO 15 K` and `DO 10 IQ` loops.

Go to the previous, next section.