------- Additional Comments From paulthomas2 at wanadoo dot fr 2004-11-15 14:58 ------- Looking at the source of SPREAD, I note that it does not assert the rank of the output matrix. Thus, in the fragment from the LLNL test it should be possible to output the calls to SPREAD to temporary arrays, multiply these and add them to the result. Thus:
DO K = 1, 25 PRTTEMP = SPREAD(VY(:25,K),DIM = 2,NCOPIES = N) PRTTEMP = PRTTEMP * SPREAD(CX(K,:N),DIM = 1,NCOPIES = 25) PX(:,:N) = PX(:,:N) + PRTTEMP !! PX(:,:N) = PX(:,:N) + SPREAD(VY(:25,K),DIM = 2,NCOPIES = N)* & !! & SPREAD(CX(K,:N),DIM = 1,NCOPIES = 25) END DO works but the commented out part does not. Is the caller or the callee responsible for asserting the rank of the output? If the latter, the fix is trivial. If the former, the problem is not with SPREAD but with the compiler front-end not assigning intermediate temporaries the correct rank. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18495