Xref: utzoo comp.lang.fortran:5095 comp.unix.cray:286 comp.sys.super:307 Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!uwm.edu!bionet!agate!usenet.ins.cwru.edu!eagle!news From: fsjohnv@alliant1.lerc.nasa.gov (Richard Mulac) Newsgroups: comp.lang.fortran,comp.unix.cray,comp.sys.super Subject: Fortran optimization Message-ID: <1991Apr3.062644.23436@eagle.lerc.nasa.gov> Date: 3 Apr 91 06:26:44 GMT Sender: news@eagle.lerc.nasa.gov Organization: NASA Lewis Research Center, Cleveland Ohio Lines: 465 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@alliant1.lerc.nasa.gov * * Cleveland, Ohio 44135 * * * (216) 433-5936 * * *******************************************************************************