Title: COMP309/509 - Lecture 16 class: middle, center, inverse

COMP309/509 - Parallel and Distributed Computing

Lecture 16 - PVM Progamming Examples

By Mitchell Welch

University of New England


Reading


Summary


Makefiles in PVM


Makefiles in PVM

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}

Makefiles in PVM


Error Checking PVM Function Calls


Error Checking PVM Function Calls

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;
}

Error Checking PVM Function Calls

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");  
}

Error Checking PVM Function Calls

#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);  } }

Error Checking PVM Function Calls


Error Checking PVM Function Calls


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";
  }
}

PVM Examples Walk-through


PVM Examples Walk-through


PVM Examples Walk-through


Summary


class: middle, center, inverse

Questions?


Reading