C****************************************************************************** C PVM Matrix Multiply - Fortran Version C Worker Program C FILE: pvm_mm.worker.f C DESCRIPTION: See pvm_mm.master.f C PVM VERSION: 3.x C LAST REVISED: 4/18/94 Blaise Barney C****************************************************************************** C Explanation of constants and variables used in this program: C NRA = number of rows in matrix A C NCA = number of columns in matrix A C NCB = number of columns in matrix B C wtid = PVM task id of this worker program C mtid = PVM task id of master task C mtype = PVM message type C cols = columns of matrix B sent to each worker C offset = starting position within the matrix C rcode, i, j, k = misc. C a = matrix A to be multiplied C b = matrix B to be multiplied C c = result matrix C C -------------------------------------------------------------------------- program mm_worker C PVM Version 3.0 include file (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) parameter(NRA = 62) parameter(NCA = 15) parameter(NCB = 7) integer wtid, mtid, mtype, cols, rcode, offset, i, j, k real*8 a(NRA,NCA), b(NCA,NCB), c(NRA,NCB) C Enroll worker task (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) C Receive message from master. First set message type and determine the C tid of the parent process. Then receive following data from master: C offset = starting position in matrix C cols = number of columns of B to receive C a = receive all of matrix A C b = receive some columns from matrix B mtype = 1 (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) write(*,10) wtid, cols 10 format('worker task id = ',i8,' received ',i3,' cols from B') C Do matrix multiply do 20 k=1, cols do 20 i=1, NRA c(i,k) = 0.0 do 20 j=1, NCA c(i,k) = c(i,k) + a(i,j) * b(j,k) 20 continue C Set up send message to master. First set message type and C initialize send buffer. Then send following data elements to master: C offset = starting position in result matrix C C cols = number of columns to send C c = our part of result matrix C mtype = 2 (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) C Send to master (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) C Exit PVM (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) end