Fortran optimization

Richard Mulac fsjohnv at alliant1.lerc.nasa.gov
Wed Apr 3 16:26:44 AEST 1991


   While optimizing a code last year I ran across a situation which on the
surface appears to contradict some of the basic rules one abides by when
trying to write efficient Fortran code.  I was trying to merge several DO
loop blocks to eliminate the overhead associated with redundant index
calculations and also to reduce memory access.  The code was written to
be run on a CRAY Y-MP, compiling with cft77 4.0.1.6.  What I found can
be described using the following program TEST, which calls subroutines
JOINED and SPLIT (It's a few hundred lines long, but the majority of the
code is redundant).

      PROGRAM TEST
      PARAMETER (IX=10000,JX=100,NX=100)
      COMMON /GLOBAL/
     .  A(IX,JX),B(IX,JX),C(IX,JX)
      CALL JOINED
      CALL SPLIT
      STOP
      END
      SUBROUTINE JOINED
      PARAMETER (IX=10000,JX=100,NX=100)
      COMMON /GLOBAL/
     .  A(IX,JX),B(IX,JX),C(IX,JX)
C
      DO N=1,NX
      DO I=1,IX
      A(I,  1) = A(I,  1) * B(I,  1) + C(I,  1)
      A(I,  2) = A(I,  2) * B(I,  2) + C(I,  2)
      A(I,  3) = A(I,  3) * B(I,  3) + C(I,  3)
      A(I,  4) = A(I,  4) * B(I,  4) + C(I,  4)
      A(I,  5) = A(I,  5) * B(I,  5) + C(I,  5)
      A(I,  6) = A(I,  6) * B(I,  6) + C(I,  6)
      A(I,  7) = A(I,  7) * B(I,  7) + C(I,  7)
      A(I,  8) = A(I,  8) * B(I,  8) + C(I,  8)
      A(I,  9) = A(I,  9) * B(I,  9) + C(I,  9)
      A(I, 10) = A(I, 10) * B(I, 10) + C(I, 10)
      A(I, 11) = A(I, 11) * B(I, 11) + C(I, 11)
      A(I, 12) = A(I, 12) * B(I, 12) + C(I, 12)
      A(I, 13) = A(I, 13) * B(I, 13) + C(I, 13)
      A(I, 14) = A(I, 14) * B(I, 14) + C(I, 14)
      A(I, 15) = A(I, 15) * B(I, 15) + C(I, 15)
      A(I, 16) = A(I, 16) * B(I, 16) + C(I, 16)
      A(I, 17) = A(I, 17) * B(I, 17) + C(I, 17)
      A(I, 18) = A(I, 18) * B(I, 18) + C(I, 18)
      A(I, 19) = A(I, 19) * B(I, 19) + C(I, 19)
      A(I, 20) = A(I, 20) * B(I, 20) + C(I, 20)
      A(I, 21) = A(I, 21) * B(I, 21) + C(I, 21)
      A(I, 22) = A(I, 22) * B(I, 22) + C(I, 22)
      A(I, 23) = A(I, 23) * B(I, 23) + C(I, 23)
      A(I, 24) = A(I, 24) * B(I, 24) + C(I, 24)
      A(I, 25) = A(I, 25) * B(I, 25) + C(I, 25)
      A(I, 26) = A(I, 26) * B(I, 26) + C(I, 26)
      A(I, 27) = A(I, 27) * B(I, 27) + C(I, 27)
      A(I, 28) = A(I, 28) * B(I, 28) + C(I, 28)
      A(I, 29) = A(I, 29) * B(I, 29) + C(I, 29)
      A(I, 30) = A(I, 30) * B(I, 30) + C(I, 30)
      A(I, 31) = A(I, 31) * B(I, 31) + C(I, 31)
      A(I, 32) = A(I, 32) * B(I, 32) + C(I, 32)
      A(I, 33) = A(I, 33) * B(I, 33) + C(I, 33)
      A(I, 34) = A(I, 34) * B(I, 34) + C(I, 34)
      A(I, 35) = A(I, 35) * B(I, 35) + C(I, 35)
      A(I, 36) = A(I, 36) * B(I, 36) + C(I, 36)
      A(I, 37) = A(I, 37) * B(I, 37) + C(I, 37)
      A(I, 38) = A(I, 38) * B(I, 38) + C(I, 38)
      A(I, 39) = A(I, 39) * B(I, 39) + C(I, 39)
      A(I, 40) = A(I, 40) * B(I, 40) + C(I, 40)
      A(I, 41) = A(I, 41) * B(I, 41) + C(I, 41)
      A(I, 42) = A(I, 42) * B(I, 42) + C(I, 42)
      A(I, 43) = A(I, 43) * B(I, 43) + C(I, 43)
      A(I, 44) = A(I, 44) * B(I, 44) + C(I, 44)
      A(I, 45) = A(I, 45) * B(I, 45) + C(I, 45)
      A(I, 46) = A(I, 46) * B(I, 46) + C(I, 46)
      A(I, 47) = A(I, 47) * B(I, 47) + C(I, 47)
      A(I, 48) = A(I, 48) * B(I, 48) + C(I, 48)
      A(I, 49) = A(I, 49) * B(I, 49) + C(I, 49)
      A(I, 50) = A(I, 50) * B(I, 50) + C(I, 50)
      A(I, 51) = A(I, 51) * B(I, 51) + C(I, 51)
      A(I, 52) = A(I, 52) * B(I, 52) + C(I, 52)
      A(I, 53) = A(I, 53) * B(I, 53) + C(I, 53)
      A(I, 54) = A(I, 54) * B(I, 54) + C(I, 54)
      A(I, 55) = A(I, 55) * B(I, 55) + C(I, 55)
      A(I, 56) = A(I, 56) * B(I, 56) + C(I, 56)
      A(I, 57) = A(I, 57) * B(I, 57) + C(I, 57)
      A(I, 58) = A(I, 58) * B(I, 58) + C(I, 58)
      A(I, 59) = A(I, 59) * B(I, 59) + C(I, 59)
      A(I, 60) = A(I, 60) * B(I, 60) + C(I, 60)
      A(I, 61) = A(I, 61) * B(I, 61) + C(I, 61)
      A(I, 62) = A(I, 62) * B(I, 62) + C(I, 62)
      A(I, 63) = A(I, 63) * B(I, 63) + C(I, 63)
      A(I, 64) = A(I, 64) * B(I, 64) + C(I, 64)
      A(I, 65) = A(I, 65) * B(I, 65) + C(I, 65)
      A(I, 66) = A(I, 66) * B(I, 66) + C(I, 66)
      A(I, 67) = A(I, 67) * B(I, 67) + C(I, 67)
      A(I, 68) = A(I, 68) * B(I, 68) + C(I, 68)
      A(I, 69) = A(I, 69) * B(I, 69) + C(I, 69)
      A(I, 70) = A(I, 70) * B(I, 70) + C(I, 70)
      A(I, 71) = A(I, 71) * B(I, 71) + C(I, 71)
      A(I, 72) = A(I, 72) * B(I, 72) + C(I, 72)
      A(I, 73) = A(I, 73) * B(I, 73) + C(I, 73)
      A(I, 74) = A(I, 74) * B(I, 74) + C(I, 74)
      A(I, 75) = A(I, 75) * B(I, 75) + C(I, 75)
      A(I, 76) = A(I, 76) * B(I, 76) + C(I, 76)
      A(I, 77) = A(I, 77) * B(I, 77) + C(I, 77)
      A(I, 78) = A(I, 78) * B(I, 78) + C(I, 78)
      A(I, 79) = A(I, 79) * B(I, 79) + C(I, 79)
      A(I, 80) = A(I, 80) * B(I, 80) + C(I, 80)
      A(I, 81) = A(I, 81) * B(I, 81) + C(I, 81)
      A(I, 82) = A(I, 82) * B(I, 82) + C(I, 82)
      A(I, 83) = A(I, 83) * B(I, 83) + C(I, 83)
      A(I, 84) = A(I, 84) * B(I, 84) + C(I, 84)
      A(I, 85) = A(I, 85) * B(I, 85) + C(I, 85)
      A(I, 86) = A(I, 86) * B(I, 86) + C(I, 86)
      A(I, 87) = A(I, 87) * B(I, 87) + C(I, 87)
      A(I, 88) = A(I, 88) * B(I, 88) + C(I, 88)
      A(I, 89) = A(I, 89) * B(I, 89) + C(I, 89)
      A(I, 90) = A(I, 90) * B(I, 90) + C(I, 90)
      A(I, 91) = A(I, 91) * B(I, 91) + C(I, 91)
      A(I, 92) = A(I, 92) * B(I, 92) + C(I, 92)
      A(I, 93) = A(I, 93) * B(I, 93) + C(I, 93)
      A(I, 94) = A(I, 94) * B(I, 94) + C(I, 94)
      A(I, 95) = A(I, 95) * B(I, 95) + C(I, 95)
      A(I, 96) = A(I, 96) * B(I, 96) + C(I, 96)
      A(I, 97) = A(I, 97) * B(I, 97) + C(I, 97)
      A(I, 98) = A(I, 98) * B(I, 98) + C(I, 98)
      A(I, 99) = A(I, 99) * B(I, 99) + C(I, 99)
      A(I,100) = A(I,100) * B(I,100) + C(I,100)
      A(I,  1) = A(I,  1) * B(I,  1) + C(I,  1)
      A(I,  2) = A(I,  2) * B(I,  2) + C(I,  2)
      A(I,  3) = A(I,  3) * B(I,  3) + C(I,  3)
      A(I,  4) = A(I,  4) * B(I,  4) + C(I,  4)
      A(I,  5) = A(I,  5) * B(I,  5) + C(I,  5)
      A(I,  6) = A(I,  6) * B(I,  6) + C(I,  6)
      A(I,  7) = A(I,  7) * B(I,  7) + C(I,  7)
      A(I,  8) = A(I,  8) * B(I,  8) + C(I,  8)
      A(I,  9) = A(I,  9) * B(I,  9) + C(I,  9)
      A(I, 10) = A(I, 10) * B(I, 10) + C(I, 10)
      A(I, 11) = A(I, 11) * B(I, 11) + C(I, 11)
      A(I, 12) = A(I, 12) * B(I, 12) + C(I, 12)
      A(I, 13) = A(I, 13) * B(I, 13) + C(I, 13)
      A(I, 14) = A(I, 14) * B(I, 14) + C(I, 14)
      A(I, 15) = A(I, 15) * B(I, 15) + C(I, 15)
      A(I, 16) = A(I, 16) * B(I, 16) + C(I, 16)
      A(I, 17) = A(I, 17) * B(I, 17) + C(I, 17)
      A(I, 18) = A(I, 18) * B(I, 18) + C(I, 18)
      A(I, 19) = A(I, 19) * B(I, 19) + C(I, 19)
      A(I, 20) = A(I, 20) * B(I, 20) + C(I, 20)
      A(I, 21) = A(I, 21) * B(I, 21) + C(I, 21)
      A(I, 22) = A(I, 22) * B(I, 22) + C(I, 22)
      A(I, 23) = A(I, 23) * B(I, 23) + C(I, 23)
      A(I, 24) = A(I, 24) * B(I, 24) + C(I, 24)
      A(I, 25) = A(I, 25) * B(I, 25) + C(I, 25)
      A(I, 26) = A(I, 26) * B(I, 26) + C(I, 26)
      A(I, 27) = A(I, 27) * B(I, 27) + C(I, 27)
      A(I, 28) = A(I, 28) * B(I, 28) + C(I, 28)
      A(I, 29) = A(I, 29) * B(I, 29) + C(I, 29)
      A(I, 30) = A(I, 30) * B(I, 30) + C(I, 30)
      A(I, 31) = A(I, 31) * B(I, 31) + C(I, 31)
      A(I, 32) = A(I, 32) * B(I, 32) + C(I, 32)
      A(I, 33) = A(I, 33) * B(I, 33) + C(I, 33)
      A(I, 34) = A(I, 34) * B(I, 34) + C(I, 34)
      A(I, 35) = A(I, 35) * B(I, 35) + C(I, 35)
      A(I, 36) = A(I, 36) * B(I, 36) + C(I, 36)
      A(I, 37) = A(I, 37) * B(I, 37) + C(I, 37)
      A(I, 38) = A(I, 38) * B(I, 38) + C(I, 38)
      A(I, 39) = A(I, 39) * B(I, 39) + C(I, 39)
      A(I, 40) = A(I, 40) * B(I, 40) + C(I, 40)
      A(I, 41) = A(I, 41) * B(I, 41) + C(I, 41)
      A(I, 42) = A(I, 42) * B(I, 42) + C(I, 42)
      A(I, 43) = A(I, 43) * B(I, 43) + C(I, 43)
      A(I, 44) = A(I, 44) * B(I, 44) + C(I, 44)
      A(I, 45) = A(I, 45) * B(I, 45) + C(I, 45)
      A(I, 46) = A(I, 46) * B(I, 46) + C(I, 46)
      A(I, 47) = A(I, 47) * B(I, 47) + C(I, 47)
      A(I, 48) = A(I, 48) * B(I, 48) + C(I, 48)
      A(I, 49) = A(I, 49) * B(I, 49) + C(I, 49)
      A(I, 50) = A(I, 50) * B(I, 50) + C(I, 50)
      A(I, 51) = A(I, 51) * B(I, 51) + C(I, 51)
      A(I, 52) = A(I, 52) * B(I, 52) + C(I, 52)
      A(I, 53) = A(I, 53) * B(I, 53) + C(I, 53)
      A(I, 54) = A(I, 54) * B(I, 54) + C(I, 54)
      A(I, 55) = A(I, 55) * B(I, 55) + C(I, 55)
      A(I, 56) = A(I, 56) * B(I, 56) + C(I, 56)
      A(I, 57) = A(I, 57) * B(I, 57) + C(I, 57)
      A(I, 58) = A(I, 58) * B(I, 58) + C(I, 58)
      A(I, 59) = A(I, 59) * B(I, 59) + C(I, 59)
      A(I, 60) = A(I, 60) * B(I, 60) + C(I, 60)
      A(I, 61) = A(I, 61) * B(I, 61) + C(I, 61)
      A(I, 62) = A(I, 62) * B(I, 62) + C(I, 62)
      A(I, 63) = A(I, 63) * B(I, 63) + C(I, 63)
      A(I, 64) = A(I, 64) * B(I, 64) + C(I, 64)
      A(I, 65) = A(I, 65) * B(I, 65) + C(I, 65)
      A(I, 66) = A(I, 66) * B(I, 66) + C(I, 66)
      A(I, 67) = A(I, 67) * B(I, 67) + C(I, 67)
      A(I, 68) = A(I, 68) * B(I, 68) + C(I, 68)
      A(I, 69) = A(I, 69) * B(I, 69) + C(I, 69)
      A(I, 70) = A(I, 70) * B(I, 70) + C(I, 70)
      A(I, 71) = A(I, 71) * B(I, 71) + C(I, 71)
      A(I, 72) = A(I, 72) * B(I, 72) + C(I, 72)
      A(I, 73) = A(I, 73) * B(I, 73) + C(I, 73)
      A(I, 74) = A(I, 74) * B(I, 74) + C(I, 74)
      A(I, 75) = A(I, 75) * B(I, 75) + C(I, 75)
      A(I, 76) = A(I, 76) * B(I, 76) + C(I, 76)
      A(I, 77) = A(I, 77) * B(I, 77) + C(I, 77)
      A(I, 78) = A(I, 78) * B(I, 78) + C(I, 78)
      A(I, 79) = A(I, 79) * B(I, 79) + C(I, 79)
      A(I, 80) = A(I, 80) * B(I, 80) + C(I, 80)
      A(I, 81) = A(I, 81) * B(I, 81) + C(I, 81)
      A(I, 82) = A(I, 82) * B(I, 82) + C(I, 82)
      A(I, 83) = A(I, 83) * B(I, 83) + C(I, 83)
      A(I, 84) = A(I, 84) * B(I, 84) + C(I, 84)
      A(I, 85) = A(I, 85) * B(I, 85) + C(I, 85)
      A(I, 86) = A(I, 86) * B(I, 86) + C(I, 86)
      A(I, 87) = A(I, 87) * B(I, 87) + C(I, 87)
      A(I, 88) = A(I, 88) * B(I, 88) + C(I, 88)
      A(I, 89) = A(I, 89) * B(I, 89) + C(I, 89)
      A(I, 90) = A(I, 90) * B(I, 90) + C(I, 90)
      A(I, 91) = A(I, 91) * B(I, 91) + C(I, 91)
      A(I, 92) = A(I, 92) * B(I, 92) + C(I, 92)
      A(I, 93) = A(I, 93) * B(I, 93) + C(I, 93)
      A(I, 94) = A(I, 94) * B(I, 94) + C(I, 94)
      A(I, 95) = A(I, 95) * B(I, 95) + C(I, 95)
      A(I, 96) = A(I, 96) * B(I, 96) + C(I, 96)
      A(I, 97) = A(I, 97) * B(I, 97) + C(I, 97)
      A(I, 98) = A(I, 98) * B(I, 98) + C(I, 98)
      A(I, 99) = A(I, 99) * B(I, 99) + C(I, 99)
      A(I,100) = A(I,100) * B(I,100) + C(I,100)
      ENDDO
      ENDDO
      RETURN
      END
      SUBROUTINE SPLIT
      PARAMETER (IX=10000,JX=100,NX=100)
      COMMON /GLOBAL/
     .  A(IX,JX),B(IX,JX),C(IX,JX)
C
      DO N=1,NX
      DO I=1,IX
      A(I,  1) = A(I,  1) * B(I,  1) + C(I,  1)
      A(I,  2) = A(I,  2) * B(I,  2) + C(I,  2)
      A(I,  3) = A(I,  3) * B(I,  3) + C(I,  3)
      A(I,  4) = A(I,  4) * B(I,  4) + C(I,  4)
      A(I,  5) = A(I,  5) * B(I,  5) + C(I,  5)
      A(I,  6) = A(I,  6) * B(I,  6) + C(I,  6)
      A(I,  7) = A(I,  7) * B(I,  7) + C(I,  7)
      A(I,  8) = A(I,  8) * B(I,  8) + C(I,  8)
      A(I,  9) = A(I,  9) * B(I,  9) + C(I,  9)
      A(I, 10) = A(I, 10) * B(I, 10) + C(I, 10)
      A(I, 11) = A(I, 11) * B(I, 11) + C(I, 11)
      A(I, 12) = A(I, 12) * B(I, 12) + C(I, 12)
      A(I, 13) = A(I, 13) * B(I, 13) + C(I, 13)
      A(I, 14) = A(I, 14) * B(I, 14) + C(I, 14)
      A(I, 15) = A(I, 15) * B(I, 15) + C(I, 15)
      A(I, 16) = A(I, 16) * B(I, 16) + C(I, 16)
      A(I, 17) = A(I, 17) * B(I, 17) + C(I, 17)
      A(I, 18) = A(I, 18) * B(I, 18) + C(I, 18)
      A(I, 19) = A(I, 19) * B(I, 19) + C(I, 19)
      A(I, 20) = A(I, 20) * B(I, 20) + C(I, 20)
      A(I, 21) = A(I, 21) * B(I, 21) + C(I, 21)
      A(I, 22) = A(I, 22) * B(I, 22) + C(I, 22)
      A(I, 23) = A(I, 23) * B(I, 23) + C(I, 23)
      A(I, 24) = A(I, 24) * B(I, 24) + C(I, 24)
      A(I, 25) = A(I, 25) * B(I, 25) + C(I, 25)
      A(I, 26) = A(I, 26) * B(I, 26) + C(I, 26)
      A(I, 27) = A(I, 27) * B(I, 27) + C(I, 27)
      A(I, 28) = A(I, 28) * B(I, 28) + C(I, 28)
      A(I, 29) = A(I, 29) * B(I, 29) + C(I, 29)
      A(I, 30) = A(I, 30) * B(I, 30) + C(I, 30)
      A(I, 31) = A(I, 31) * B(I, 31) + C(I, 31)
      A(I, 32) = A(I, 32) * B(I, 32) + C(I, 32)
      A(I, 33) = A(I, 33) * B(I, 33) + C(I, 33)
      A(I, 34) = A(I, 34) * B(I, 34) + C(I, 34)
      A(I, 35) = A(I, 35) * B(I, 35) + C(I, 35)
      A(I, 36) = A(I, 36) * B(I, 36) + C(I, 36)
      A(I, 37) = A(I, 37) * B(I, 37) + C(I, 37)
      A(I, 38) = A(I, 38) * B(I, 38) + C(I, 38)
      A(I, 39) = A(I, 39) * B(I, 39) + C(I, 39)
      A(I, 40) = A(I, 40) * B(I, 40) + C(I, 40)
      A(I, 41) = A(I, 41) * B(I, 41) + C(I, 41)
      A(I, 42) = A(I, 42) * B(I, 42) + C(I, 42)
      A(I, 43) = A(I, 43) * B(I, 43) + C(I, 43)
      A(I, 44) = A(I, 44) * B(I, 44) + C(I, 44)
      A(I, 45) = A(I, 45) * B(I, 45) + C(I, 45)
      A(I, 46) = A(I, 46) * B(I, 46) + C(I, 46)
      A(I, 47) = A(I, 47) * B(I, 47) + C(I, 47)
      A(I, 48) = A(I, 48) * B(I, 48) + C(I, 48)
      A(I, 49) = A(I, 49) * B(I, 49) + C(I, 49)
      A(I, 50) = A(I, 50) * B(I, 50) + C(I, 50)
      A(I, 51) = A(I, 51) * B(I, 51) + C(I, 51)
      A(I, 52) = A(I, 52) * B(I, 52) + C(I, 52)
      A(I, 53) = A(I, 53) * B(I, 53) + C(I, 53)
      A(I, 54) = A(I, 54) * B(I, 54) + C(I, 54)
      A(I, 55) = A(I, 55) * B(I, 55) + C(I, 55)
      A(I, 56) = A(I, 56) * B(I, 56) + C(I, 56)
      A(I, 57) = A(I, 57) * B(I, 57) + C(I, 57)
      A(I, 58) = A(I, 58) * B(I, 58) + C(I, 58)
      A(I, 59) = A(I, 59) * B(I, 59) + C(I, 59)
      A(I, 60) = A(I, 60) * B(I, 60) + C(I, 60)
      A(I, 61) = A(I, 61) * B(I, 61) + C(I, 61)
      A(I, 62) = A(I, 62) * B(I, 62) + C(I, 62)
      A(I, 63) = A(I, 63) * B(I, 63) + C(I, 63)
      A(I, 64) = A(I, 64) * B(I, 64) + C(I, 64)
      A(I, 65) = A(I, 65) * B(I, 65) + C(I, 65)
      A(I, 66) = A(I, 66) * B(I, 66) + C(I, 66)
      A(I, 67) = A(I, 67) * B(I, 67) + C(I, 67)
      A(I, 68) = A(I, 68) * B(I, 68) + C(I, 68)
      A(I, 69) = A(I, 69) * B(I, 69) + C(I, 69)
      A(I, 70) = A(I, 70) * B(I, 70) + C(I, 70)
      A(I, 71) = A(I, 71) * B(I, 71) + C(I, 71)
      A(I, 72) = A(I, 72) * B(I, 72) + C(I, 72)
      A(I, 73) = A(I, 73) * B(I, 73) + C(I, 73)
      A(I, 74) = A(I, 74) * B(I, 74) + C(I, 74)
      A(I, 75) = A(I, 75) * B(I, 75) + C(I, 75)
      A(I, 76) = A(I, 76) * B(I, 76) + C(I, 76)
      A(I, 77) = A(I, 77) * B(I, 77) + C(I, 77)
      A(I, 78) = A(I, 78) * B(I, 78) + C(I, 78)
      A(I, 79) = A(I, 79) * B(I, 79) + C(I, 79)
      A(I, 80) = A(I, 80) * B(I, 80) + C(I, 80)
      A(I, 81) = A(I, 81) * B(I, 81) + C(I, 81)
      A(I, 82) = A(I, 82) * B(I, 82) + C(I, 82)
      A(I, 83) = A(I, 83) * B(I, 83) + C(I, 83)
      A(I, 84) = A(I, 84) * B(I, 84) + C(I, 84)
      A(I, 85) = A(I, 85) * B(I, 85) + C(I, 85)
      A(I, 86) = A(I, 86) * B(I, 86) + C(I, 86)
      A(I, 87) = A(I, 87) * B(I, 87) + C(I, 87)
      A(I, 88) = A(I, 88) * B(I, 88) + C(I, 88)
      A(I, 89) = A(I, 89) * B(I, 89) + C(I, 89)
      A(I, 90) = A(I, 90) * B(I, 90) + C(I, 90)
      A(I, 91) = A(I, 91) * B(I, 91) + C(I, 91)
      A(I, 92) = A(I, 92) * B(I, 92) + C(I, 92)
      A(I, 93) = A(I, 93) * B(I, 93) + C(I, 93)
      A(I, 94) = A(I, 94) * B(I, 94) + C(I, 94)
      A(I, 95) = A(I, 95) * B(I, 95) + C(I, 95)
      A(I, 96) = A(I, 96) * B(I, 96) + C(I, 96)
      A(I, 97) = A(I, 97) * B(I, 97) + C(I, 97)
      A(I, 98) = A(I, 98) * B(I, 98) + C(I, 98)
      A(I, 99) = A(I, 99) * B(I, 99) + C(I, 99)
      A(I,100) = A(I,100) * B(I,100) + C(I,100)
      ENDDO
      DO I=1,IX
      A(I,  1) = A(I,  1) * B(I,  1) + C(I,  1)
      A(I,  2) = A(I,  2) * B(I,  2) + C(I,  2)
      A(I,  3) = A(I,  3) * B(I,  3) + C(I,  3)
      A(I,  4) = A(I,  4) * B(I,  4) + C(I,  4)
      A(I,  5) = A(I,  5) * B(I,  5) + C(I,  5)
      A(I,  6) = A(I,  6) * B(I,  6) + C(I,  6)
      A(I,  7) = A(I,  7) * B(I,  7) + C(I,  7)
      A(I,  8) = A(I,  8) * B(I,  8) + C(I,  8)
      A(I,  9) = A(I,  9) * B(I,  9) + C(I,  9)
      A(I, 10) = A(I, 10) * B(I, 10) + C(I, 10)
      A(I, 11) = A(I, 11) * B(I, 11) + C(I, 11)
      A(I, 12) = A(I, 12) * B(I, 12) + C(I, 12)
      A(I, 13) = A(I, 13) * B(I, 13) + C(I, 13)
      A(I, 14) = A(I, 14) * B(I, 14) + C(I, 14)
      A(I, 15) = A(I, 15) * B(I, 15) + C(I, 15)
      A(I, 16) = A(I, 16) * B(I, 16) + C(I, 16)
      A(I, 17) = A(I, 17) * B(I, 17) + C(I, 17)
      A(I, 18) = A(I, 18) * B(I, 18) + C(I, 18)
      A(I, 19) = A(I, 19) * B(I, 19) + C(I, 19)
      A(I, 20) = A(I, 20) * B(I, 20) + C(I, 20)
      A(I, 21) = A(I, 21) * B(I, 21) + C(I, 21)
      A(I, 22) = A(I, 22) * B(I, 22) + C(I, 22)
      A(I, 23) = A(I, 23) * B(I, 23) + C(I, 23)
      A(I, 24) = A(I, 24) * B(I, 24) + C(I, 24)
      A(I, 25) = A(I, 25) * B(I, 25) + C(I, 25)
      A(I, 26) = A(I, 26) * B(I, 26) + C(I, 26)
      A(I, 27) = A(I, 27) * B(I, 27) + C(I, 27)
      A(I, 28) = A(I, 28) * B(I, 28) + C(I, 28)
      A(I, 29) = A(I, 29) * B(I, 29) + C(I, 29)
      A(I, 30) = A(I, 30) * B(I, 30) + C(I, 30)
      A(I, 31) = A(I, 31) * B(I, 31) + C(I, 31)
      A(I, 32) = A(I, 32) * B(I, 32) + C(I, 32)
      A(I, 33) = A(I, 33) * B(I, 33) + C(I, 33)
      A(I, 34) = A(I, 34) * B(I, 34) + C(I, 34)
      A(I, 35) = A(I, 35) * B(I, 35) + C(I, 35)
      A(I, 36) = A(I, 36) * B(I, 36) + C(I, 36)
      A(I, 37) = A(I, 37) * B(I, 37) + C(I, 37)
      A(I, 38) = A(I, 38) * B(I, 38) + C(I, 38)
      A(I, 39) = A(I, 39) * B(I, 39) + C(I, 39)
      A(I, 40) = A(I, 40) * B(I, 40) + C(I, 40)
      A(I, 41) = A(I, 41) * B(I, 41) + C(I, 41)
      A(I, 42) = A(I, 42) * B(I, 42) + C(I, 42)
      A(I, 43) = A(I, 43) * B(I, 43) + C(I, 43)
      A(I, 44) = A(I, 44) * B(I, 44) + C(I, 44)
      A(I, 45) = A(I, 45) * B(I, 45) + C(I, 45)
      A(I, 46) = A(I, 46) * B(I, 46) + C(I, 46)
      A(I, 47) = A(I, 47) * B(I, 47) + C(I, 47)
      A(I, 48) = A(I, 48) * B(I, 48) + C(I, 48)
      A(I, 49) = A(I, 49) * B(I, 49) + C(I, 49)
      A(I, 50) = A(I, 50) * B(I, 50) + C(I, 50)
      A(I, 51) = A(I, 51) * B(I, 51) + C(I, 51)
      A(I, 52) = A(I, 52) * B(I, 52) + C(I, 52)
      A(I, 53) = A(I, 53) * B(I, 53) + C(I, 53)
      A(I, 54) = A(I, 54) * B(I, 54) + C(I, 54)
      A(I, 55) = A(I, 55) * B(I, 55) + C(I, 55)
      A(I, 56) = A(I, 56) * B(I, 56) + C(I, 56)
      A(I, 57) = A(I, 57) * B(I, 57) + C(I, 57)
      A(I, 58) = A(I, 58) * B(I, 58) + C(I, 58)
      A(I, 59) = A(I, 59) * B(I, 59) + C(I, 59)
      A(I, 60) = A(I, 60) * B(I, 60) + C(I, 60)
      A(I, 61) = A(I, 61) * B(I, 61) + C(I, 61)
      A(I, 62) = A(I, 62) * B(I, 62) + C(I, 62)
      A(I, 63) = A(I, 63) * B(I, 63) + C(I, 63)
      A(I, 64) = A(I, 64) * B(I, 64) + C(I, 64)
      A(I, 65) = A(I, 65) * B(I, 65) + C(I, 65)
      A(I, 66) = A(I, 66) * B(I, 66) + C(I, 66)
      A(I, 67) = A(I, 67) * B(I, 67) + C(I, 67)
      A(I, 68) = A(I, 68) * B(I, 68) + C(I, 68)
      A(I, 69) = A(I, 69) * B(I, 69) + C(I, 69)
      A(I, 70) = A(I, 70) * B(I, 70) + C(I, 70)
      A(I, 71) = A(I, 71) * B(I, 71) + C(I, 71)
      A(I, 72) = A(I, 72) * B(I, 72) + C(I, 72)
      A(I, 73) = A(I, 73) * B(I, 73) + C(I, 73)
      A(I, 74) = A(I, 74) * B(I, 74) + C(I, 74)
      A(I, 75) = A(I, 75) * B(I, 75) + C(I, 75)
      A(I, 76) = A(I, 76) * B(I, 76) + C(I, 76)
      A(I, 77) = A(I, 77) * B(I, 77) + C(I, 77)
      A(I, 78) = A(I, 78) * B(I, 78) + C(I, 78)
      A(I, 79) = A(I, 79) * B(I, 79) + C(I, 79)
      A(I, 80) = A(I, 80) * B(I, 80) + C(I, 80)
      A(I, 81) = A(I, 81) * B(I, 81) + C(I, 81)
      A(I, 82) = A(I, 82) * B(I, 82) + C(I, 82)
      A(I, 83) = A(I, 83) * B(I, 83) + C(I, 83)
      A(I, 84) = A(I, 84) * B(I, 84) + C(I, 84)
      A(I, 85) = A(I, 85) * B(I, 85) + C(I, 85)
      A(I, 86) = A(I, 86) * B(I, 86) + C(I, 86)
      A(I, 87) = A(I, 87) * B(I, 87) + C(I, 87)
      A(I, 88) = A(I, 88) * B(I, 88) + C(I, 88)
      A(I, 89) = A(I, 89) * B(I, 89) + C(I, 89)
      A(I, 90) = A(I, 90) * B(I, 90) + C(I, 90)
      A(I, 91) = A(I, 91) * B(I, 91) + C(I, 91)
      A(I, 92) = A(I, 92) * B(I, 92) + C(I, 92)
      A(I, 93) = A(I, 93) * B(I, 93) + C(I, 93)
      A(I, 94) = A(I, 94) * B(I, 94) + C(I, 94)
      A(I, 95) = A(I, 95) * B(I, 95) + C(I, 95)
      A(I, 96) = A(I, 96) * B(I, 96) + C(I, 96)
      A(I, 97) = A(I, 97) * B(I, 97) + C(I, 97)
      A(I, 98) = A(I, 98) * B(I, 98) + C(I, 98)
      A(I, 99) = A(I, 99) * B(I, 99) + C(I, 99)
      A(I,100) = A(I,100) * B(I,100) + C(I,100)
      ENDDO
      ENDDO
      RETURN
      END

   The code was compiled with the -o aggress option which vectorized all of the
inner loops in both JOINED and SPLIT.  I would expect that JOINED would run
faster and more efficiently than SPLIT, but the opposite result occurred.
Using the hardware performance monitor (hpm) I found that JOINED ran in 2.8
seconds at a rate of 140 Mflops, while SPLIT ran in 2.2 seconds at a rate
of 180 Mflops.  I've skimmed through some of the assembly code and have not
seen a difference in how either subroutine handles the inner loop operations.
I've also looked at all of the output from hpm and did not notice anything
that different in either subroutine's performance statistics.
   I've bounced this off several people without coming up with a clear cut
answer.  Most people have told me it's probably a compiler bug, but I thought
I would put it out here and see if anyone has run into something like this.

*******************************************************************************
*   Richard Mulac                      *                                      *
*   NASA Lewis Research Center         *                                      *
*   21000 Brookpark Road               *    Network address:                  *
*   M.S. 5-9                           *    fsjohnv at alliant1.lerc.nasa.gov    *
*   Cleveland, Ohio  44135             *                                      *
*   (216) 433-5936                     *                                      *
*******************************************************************************



More information about the Comp.unix.cray mailing list