Title: COMP309/509 - Lecture 16 class: middle, center, inverse
makefile
s 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_ARCH
make
.LIBS
variable. These should remain the same for your makefiles.PvmOk
PvmOk
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