Title: COMP309/509 - Lecture 16 class: middle, center, inverse
makefiles are required in all assignments.all target so produce all executables for the assignmentclean target that will allow for fast rebuilds (i.e. it should remove all binaries from the build directory)host target to copy all required executables to the pvm/bin/LINUXX86_64 directory.COMPILER = gcc
CFLAGS = -Wall
LIBS = -L$(PVM_ROOT)/lib/$(PVM_ARCH) -I$(PVM_ROOT)/include -lpvm3
GLIBS = ${LIBS} -lgpvm3
EXES = spmd2
all: ${EXES}
spmd2: spmd2.c
${COMPILER} ${CFLAGS} spmd2.c $(GLIBS) -o spmd2
host:
cp -f ${EXES} ${HOME}/pvm3/bin/$(PVM_ARCH)/
clean:
rm -f *~ *.o ${EXES}
PVM_ROOT and PVM_ARCHmake.LIBS variable. These should remain the same for your makefiles.PvmOkPvmOk is zero.int pvm_error_check(int info, char* routine){
if(info < 0){
fprintf(stderr,
"PVM error code %d: %s failed -- aborting\n",
info, routine);
pvm_exit();
exit(EXIT_FAILURE);
}
return info;
}
int receive_row(int tid, int nproc, int* row){
pvm_recv(tid, ROWTAG);
return pvm_upkint(row, nproc, 1);
}
int receive_row(int tid, int nproc, int* row){
pvm_error_check(pvm_recv(tid, ROWTAG), "receive_row:pvm_recv");
return pvm_error_check(pvm_upkint(row, nproc, 1), "receive_row:pvm_upkint");
}
pvm_exit(); exit(EXIT_FAILURE); is hardwired in.#define PVM_ERROR_CHECK(X, Y) \
{ int _err_rtn_;\
if((_err_rtn_ = X) < 0){\
fprintf(stderr, "PVM error code %d: %s failed -- aborting\n", _err_rtn_, #X);\
(Y); } }
int pvm_error_check(int info, char* routine){
if(info < 0){
fprintf(stderr,
"PVM error %s: %s failed -- aborting\n",
pvmErrorCode2String(info), routine);
pvm_exit();
exit(EXIT_FAILURE);
}
return info;
}
char* pvmErrorCode2String(int errcode){
switch(errcode){
case PvmBadParam: return "PvmBadParam";
case PvmMismatch: return "PvmMismatch";
case PvmNoData: return "PvmNoData";
case PvmNoHost: return "PvmNoHost";
case PvmNoFile: return "PvmNoFile";
case PvmNoMem: return "PvmNoMem";
case PvmBadMsg: return "PvmBadMsg";
case PvmSysErr: return "PvmSysErr";
case PvmNoBuf: return "PvmNoBuf";
case PvmNoSuchBuf: return "PvmNoSuchBuf";
case PvmNullGroup: return "PvmNullGroup";
case PvmDupGroup: return "PvmDupGroup";
case PvmNoGroup: return "PvmNoGroup";
case PvmNotInGroup: return "PvmNotInGroup";
case PvmNoInst: return "PvmNoInst";
case PvmHostFail: return "PvmHostFail";
case PvmNoParent: return "PvmNoParent";
case PvmNotImpl: return "PvmNotImpl";
case PvmDSysErr: return "PvmDSysErr";
case PvmBadVersion: return "PvmBadVersion";
case PvmOutOfRes: return "PvmOutOfRes";
case PvmDupHost: return "PvmDupHost";
case PvmCantStart: return "PvmCantStart";
case PvmAlready: return "PvmAlready";
case PvmNoTask: return "PvmNoTask";
case PvmNoEntry: return "PvmNoEntry";
case PvmDupEntry: return "PvmDupEntry";
default: return "Unknown Code";
}
}
class: middle, center, inverse