示例#1
0
int receive(heur_prob *p)
{  
   int r_bufid, info, bytes, msgtag, parent;
   
   PVM_FUNC(r_bufid, pvm_recv(-1, VRP_BROADCAST_DATA));
   PVM_FUNC(info, pvm_bufinfo(r_bufid, &bytes, &msgtag, &parent));
   PVM_FUNC(info, pvm_upkint(&(p->dist.wtype), 1, 1));
   PVM_FUNC(info, pvm_upkint(&(p->vertnum), 1, 1));
   PVM_FUNC(info, pvm_upkint(&(p->depot), 1, 1));
   PVM_FUNC(info, pvm_upkint(&p->capacity, 1, 1));
   p->demand = (int *) calloc (p->vertnum, sizeof(int));
   PVM_FUNC(info, pvm_upkint(p->demand, p->vertnum, 1));
   p->edgenum = p->vertnum*(p->vertnum-1)/2;
   if (p->dist.wtype){ /* not EXPLICIT */
      p->dist.coordx = (double *) calloc(p->vertnum, sizeof(double));
      p->dist.coordy = (double *) calloc(p->vertnum, sizeof(double));
      PVM_FUNC(info, pvm_upkdouble(p->dist.coordx, p->vertnum, 1));
      PVM_FUNC(info, pvm_upkdouble(p->dist.coordy, p->vertnum, 1));
      if ((p->dist.wtype == _EUC_3D) || (p->dist.wtype == _MAX_3D) || 
	  (p->dist.wtype == _MAN_3D)){
	 p->dist.coordz = (double *) calloc(p->vertnum, sizeof(double));
	 PVM_FUNC(info, pvm_upkdouble(p->dist.coordz, p->vertnum, 1));
      }
   }
   else{ /* EXPLICIT */
      p->dist.cost = (int *) malloc (p->edgenum*sizeof(int));
      PVM_FUNC(info, pvm_upkint(p->dist.cost, (int)p->edgenum, 1));
   }
   PVM_FUNC(info, pvm_freebuf(r_bufid));
   return(parent);
}
示例#2
0
void
StopwatchPVMUnpack(Stopwatch_t *w)
{
  pvm_upkdouble(&(w->elapsed), 1, 1);
  pvm_upkdouble(&(w->user),    1, 1);
  pvm_upkdouble(&(w->sys),     1, 1);
}
示例#3
0
文件: pvmica.c 项目: caromk/binica
int receive_assign(tassign *assign) {
	int     bufid, tag, dummy, datasize, i, toint[ASSIGN_NINT];
	double *tdbl, todbl[ASSIGN_NDBL];
	float  *tflt;

	bufid = pvm_recv(-1,-1);
	pvm_bufinfo(bufid,&dummy,&tag,&dummy);
	if (tag == 2) return 0;
	
	pvm_upkint(toint,ASSIGN_NINT,1);
	pvm_upkdouble(todbl,ASSIGN_NDBL,1);

	assign->id         = (integer)toint[ASSIGN_ID];
	assign->chans      = (integer)toint[ASSIGN_CHANS];
	assign->frames     = (integer)toint[ASSIGN_FRAMES];
	assign->epochs     = (integer)toint[ASSIGN_EPOCHS];
	assign->bias       = (integer)toint[ASSIGN_BIAS];
	assign->signs      = (integer)toint[ASSIGN_SIGNS];
	assign->extended   = (integer)toint[ASSIGN_EXTENDED];
	assign->extblocks  = (integer)toint[ASSIGN_EXTBLOCKS];
	assign->pdfsize    = (integer)toint[ASSIGN_PDFSIZE];
	assign->nsub       = (integer)toint[ASSIGN_NSUB];
	assign->verbose    = (integer)toint[ASSIGN_VERBOSE];
	assign->block      = (integer)toint[ASSIGN_BLOCK];
	assign->maxsteps   = (integer)toint[ASSIGN_MAXSTEPS];
	
	assign->lrate      = (doublereal)todbl[ASSIGN_LRATE];
	assign->annealstep = (doublereal)todbl[ASSIGN_ANNEALSTEP];
	assign->annealdeg  = (doublereal)todbl[ASSIGN_ANNEALDEG];
	assign->nochange   = (doublereal)todbl[ASSIGN_NOCHANGE];
	assign->momentum   = (doublereal)todbl[ASSIGN_MOMENTUM];

	datasize = assign->chans * assign->frames * assign->epochs;
	assign->data = (doublereal*)malloc(datasize*sizeof(doublereal));
	if (sizeof(float) != sizeof(doublereal)) {
		tflt = (float*)malloc(datasize*sizeof(float));
		pvm_upkfloat(tflt,datasize,1);
		for (i=0 ; i<datasize ; i++) assign->data[i] = (doublereal)tflt[i];
		free(tflt);
	}
	else
		pvm_upkfloat((float*)(assign->data),datasize,1);

	datasize = assign->chans * assign->chans;
	assign->weights = (doublereal*)malloc(datasize*sizeof(doublereal));
	if (sizeof(double) != sizeof(doublereal)) {
		tdbl = (double*)malloc(datasize*sizeof(double));
		pvm_upkdouble(tdbl,datasize,1);
		for (i=0 ; i<datasize ; i++) assign->weights[i] = (doublereal)tdbl[i];
		free(tdbl);
	}
	else
		pvm_upkdouble((double*)(assign->weights),datasize,1);

	pvm_freebuf(bufid);
	return 1;
}
示例#4
0
void main()
{

    /* enroll in pvm */
    mytid = pvm_mytid();
    master = pvm_parent();

    /* receive data from master */
    pvm_recv(master, DATA);
    pvm_upkint(&nproc, 1, 1);
    pvm_upkdouble(&lower, 1, 1);
    pvm_upkdouble(&upper, 1, 1);
    pvm_upkdouble(&delta_x, 1, 1);
    pvm_upkint(&partitions, 1, 1);
    pvm_upkint(tids, nproc, 1);

    /* determine which slave I am (0..nproc-1) */
    for(i=0; i<nproc; i++)
        if(mytid==tids[i]) {
            mynode = i;
            break;
        }

    /* start timiming */
    start = clock();

    /* calculate approximation */
    partitions_per_slave = partitions / nproc;
    first = lower + mynode * ((upper-lower)/nproc);
    last = first + partitions_per_slave * delta_x;

    x = first + (delta_x/2.0);
    while(x<last)
    {
        approx_result += f(x) * delta_x;
        x += delta_x;
    }

    /* end timing */
    elapse = (clock() - start) / clocks_per_sec;
    avg_time = elapse / partitions;

    /* send the results back to the master program */
    pvm_initsend(PvmDataDefault);
    pvm_pkdouble(&elapse, 1, 1);
    pvm_pkdouble(&approx_result, 1, 1);
    pvm_pkdouble(&avg_time, 1, 1);
    pvm_send(master, RESULTS);

    /* exit pvm */
    pvm_exit();
}
示例#5
0
/**
 * Description not yet available.
 * \param
 */
void adpvm_unpack(const dvar_vector& _v)
{
  dvar_vector& v = (dvar_vector&) _v;
  int imin;
  int imax;
  pvm_upkint(&imin,1,1);
  pvm_upkint(&imax,1,1);
  if (allocated(v))
  {
    if (v.indexmin()!=imin)
    {
      cerr << "Error in min index in "
          "void adpvm_unpack(const dvar_vector& v)" << endl;
      ad_exit(1);
    }
    if (v.indexmax()!=imax)
    {
      cerr << "Error in max index in"
          " void adpvm_unpack(const dvar_vector& v)" << endl;
      ad_exit(1);
    }
  }
  else
  {
    v.allocate(imin,imax);
  }
  pvm_upkdouble(&(value(v(imin))),imax-imin+1,1);
  save_identifier_string("B");
  v.save_dvar_vector_position();
  save_identifier_string("D");
  gradient_structure::GRAD_STACK1->
            set_gradient_stack(adpvm_pack_vector_derivatives);
}
示例#6
0
double BBSDirect::upkdouble() {
	double x;
//	printf("upkdouble from %d\n", pvm_getrbuf());
	if( pvm_upkdouble(&x, 1, 1)) { perror("upkdouble"); }
//	printf("upkdouble returning %g\n", x);
	return x;
}
示例#7
0
/**
 * Description not yet available.
 * \param
 */
void pvm_unpack(const dvar_vector& _v)
{
  dvar_vector& v = (dvar_vector&) _v;
  int imin;
  int imax;
  pvm_upkint(&imin,1,1);
  pvm_upkint(&imax,1,1);
  if (allocated(v))
  {
    if (v.indexmin()!=imin)
    {
      cerr << "Error in min index in "
          "void pvm_unpack(const dvar_vector& v)" << endl;
      ad_exit(1);
    }
    if (v.indexmax()!=imax)
    {
      cerr << "Error in max index in"
          " void pvm_unpack(const dvar_vector& v)" << endl;
      ad_exit(1);
    }
  }
  else
  {
    v.allocate(imin,imax);
  }
  pvm_upkdouble(&(value(v(imin))),imax-imin+1,1);
}
示例#8
0
文件: proccomm.c 项目: e2bsq/Symphony
int receive_dbl_array(double *array, int size)
{
   int info;
   
   PVM_FUNC(info, pvm_upkdouble(array, size, 1));
   
   return(info);
}
示例#9
0
/**
 * Description not yet available.
 * \param
 */
void adpvm_unpack_number_derivative(void)
{
  verify_identifier_string("S");
  double dv;
  pvm_upkdouble(&dv,1,1);;
  prevariable_position dvpos=restore_prevariable_position();
  verify_identifier_string("R");
  save_double_derivative(dv,dvpos);
}
示例#10
0
/**
 * Description not yet available.
 * \param
 */
void adpvm_unpack(const prevariable& _v)
{
  dvariable& v = (dvariable&) _v;
  save_identifier_string("C");
  v.save_prevariable_position();
  save_identifier_string("D");
  pvm_upkdouble((double*)(&(value(v))),1,1);
  gradient_structure::GRAD_STACK1->
            set_gradient_stack(adpvm_pack_number_derivative);
}
示例#11
0
int main(int argc, char *argv[]){
  int mytid, tids[MAXNODES];
  int numt, n, nproc, msgtype;
  double val, work, result;
  double xs[10000];
  double ys[10000][10000];
  for(int i=0; i<10000; i++){
    xs[i] = rand();
    for(int j=0; i<10000; j++){
      ys[i][j] = rand();
    }
  }
  mytid = pvm_mytid();
  nproc=4;
  numt = pvm_spawn(CLIENTNAME, NULL, PvmTaskDefault, NULL, nproc, tids);
  if (numt != nproc){
    fprintf(stderr, "numt = %d, nproc = %d\n", numt, nproc);
    fprintf(stderr, "error: pvm_spawn()\n");
    pvm_exit();
    exit(1);
  }
  msgtype=11;
  for(n=0; n<nproc; n++){
    pvm_initsend(PvmDataDefault);
    pvm_pkint(&n, 1, 1);
    pvm_pkdouble(&xs, 10000, 1);
    pvm_pkdouble(&ys, 10000, 1);
    pvm_send(tids[n], msgtype);
  }
  msgtype=22; result=0.0;
  for(n=0; n<nproc; n++){
    pvm_recv(-1, msgtype);
    pvm_upkdouble(&work, 1, 1);
    result += work;
  }
  printf("Result = %25.15lf\n", result);
  return 0;
}
示例#12
0
void BBSDirect::upkvec(int n, double* x) {
//	printf("upkvec from %d\n", pvm_getrbuf());
	if( pvm_upkdouble(x, n, 1)) { perror("upkvec"); }
}
示例#13
0
文件: pvmica.c 项目: caromk/binica
int receive_result(tresult *result) {
	int    *tint, bufid, datasize, bias, signs, toint[RESULT_NINT];
	int     i, buflen, tag, tid;
	double *tdbl, todbl[RESULT_NDBL];

	bufid = pvm_recv(-1,-1);
	pvm_upkint(toint,RESULT_NINT,1);
	pvm_upkdouble(todbl,RESULT_NDBL,1);

	result->id         = (integer)toint[RESULT_ID];
	result->chans      = (integer)toint[RESULT_CHANS];
	bias               = (integer)toint[RESULT_BIAS];
	signs              = (integer)toint[RESULT_SIGNS];

	result->lrate      = (doublereal)todbl[RESULT_LRATE];

	datasize = result->chans * result->chans;
	result->weights = (doublereal*)malloc(datasize*sizeof(doublereal));
	if (sizeof(double) != sizeof(doublereal)) {
		tdbl = (double*)malloc(datasize*sizeof(double));
		pvm_upkdouble(tdbl,datasize,1);
		for (i=0 ; i<datasize ; i++) result->weights[i] = (doublereal)tdbl[i];
		free(tdbl);
	}
	else
		pvm_upkdouble((double*)(result->weights),datasize,1);

	if (bias) {
		datasize = result->chans;
		result->bias = (doublereal*)malloc(datasize*sizeof(doublereal));
		if (sizeof(double) != sizeof(doublereal)) {
			tdbl = (double*)malloc(datasize*sizeof(double));
			pvm_upkdouble(tdbl,datasize,1);
			for (i=0 ; i<datasize ; i++) result->bias[i] = (doublereal)tdbl[i];
			free(tdbl);
		}
		else
			pvm_upkdouble((double*)(result->bias),datasize,1);
	}
	else
		result->bias = NULL;

	if (signs) {
		datasize = result->chans;
		result->signs = (integer*)malloc(datasize*sizeof(integer));
		if (sizeof(int) != sizeof(integer)) {
			tint = (int*)malloc(datasize*sizeof(int));
			pvm_upkint(tint,datasize,1);
			for (i=0 ; i<datasize ; i++) result->signs[i] = (integer)tint[i];
			free(tint);
		}
		else
			pvm_upkint((int*)(result->signs),datasize,1);
	}
	else
		result->signs = NULL;

	pvm_bufinfo(bufid,&buflen,&tag,&tid);
	pvm_freebuf(bufid);
	
	return tid;
}
示例#14
0
void BBSClient::upkvec(int n, double* x) {
	if( pvm_upkdouble(x, n, 1)) { perror("upkvec"); }
}
示例#15
0
文件: pvm.c 项目: amnh/malign
double UnpackNextDouble () {
  double i;
  assert (! pvm_upkdouble (&i, 1, 1));
  return (i);
}
示例#16
0
文件: master.c 项目: skoneka/prir
int main(int argc, char **argv)
{
  int myTID;

  int tids[NPROC] = {[0 ... NPROC-1] = 0};
  int res;

  myTID = pvm_mytid();
  printf("Master: TID is %d\n", myTID);

  double          a;
  double          b;
  int          num_points;
  a = atof(argv[1]);
  b = atof(argv[2]);
  num_points = atoi(argv[3]);

  double begins[NPROC];
  double ends[NPROC];

  double basic_range = (b-a)/NPROC;
  //double extra_range = fmod((b-a),NPROC);

  for (int procindex = 0; procindex < NPROC; procindex++) {
    begins[procindex] = procindex * basic_range;
    ends[procindex] = begins[procindex] + basic_range;

    printf("begins[%d]= %f ends[%d]= %f\n", procindex,begins[procindex], procindex,ends[procindex]);
  }

  printf ("basic_range = %f\n", basic_range);
  

  res = pvm_spawn("slave", NULL, PvmTaskDefault, "", NPROC, tids);
  printf("res %d\n", res);
  if (res<1) {
    printf("Master: pvm_spawn error\n");
    pvm_exit();
    exit(1);
  }
  //for (int procindex = 0; procindex < NPROC; procindex++) printf("tids[%d] = %d\n", procindex, tids[procindex]);

  for (int procindex = 0; procindex < NPROC; procindex++) {
    pvm_initsend(PvmDataDefault);
    pvm_pkdouble(&begins[procindex], 1, 1);
    pvm_pkdouble(&ends[procindex], 1, 1);
    pvm_pkint(&num_points, 1, 1);

    pvm_send(tids[procindex], 1);
  }

  double result=0;
  for (int procindex = 0; procindex < NPROC; procindex++) {
    double r=0;
    pvm_recv(-1, -1);
    pvm_upkdouble(&r, 1, 1);

    printf("Master has received r=%f\n", r);
    result += r;
  }
  printf("Result %f\n", result);

  pvm_exit();

  return 0;
}
示例#17
0
int 
main(void)
{
  struct p7trace_s *tr;         /* traceback of an alignment               */
  int      master_tid;		/* PVM TID of our master */
  char    *hmmfile;	        /* file to read HMM(s) from                */
  HMMFILE *hmmfp;               /* opened hmmfile for reading              */
  struct plan7_s *hmm;
  char    *seq;
  char    *dsq;
  int      len;
  int      nhmm;		/* number of HMM to work on                */
  float    sc;
  int      my_idx = -1;		/* my index, 0..nslaves-1 */
  float    globT;		/* T parameter: keep only hits > globT bits */
  double   globE;		/* E parameter: keep hits < globE E-value   */
  double   pvalue;		/* Z*pvalue = Evalue                        */
  int      Z;			/* nseq to base E value calculation on      */
  int      send_trace;		/* TRUE if score is significant             */
  int      do_xnu;		/* TRUE to do XNU filter on seq             */
  int      do_forward;		/* TRUE to use Forward() scores not Viterbi */
  int      do_null2;		/* TRUE to correct scores w/ ad hoc null2   */
  int      alphatype;		/* alphabet type, hmmAMINO or hmmNUCLEIC    */
  int      code;		/* return code after initialization         */

  
  /* Register leave_pvm() cleanup function so any exit() call
   * first calls pvm_exit().
   */
  if (atexit(leave_pvm) != 0) { pvm_exit(); Die("slave couldn't register leave_pvm()"); }

  /*****************************************************************
   * initialization.
   * Master broadcasts to us: 
   *     1) len of HMM file name        (int)
   *     2) name of HMM file            (string)
   *     3) length of sequence string   (int) 
   *     4) sequence                    (string)
   *     5) globT threshold
   *     6) globE threshold
   *     7) Z 
   *     8) do_xnu flag
   *     9) do_forward flag
   *    10) do_null2 flag
   *    11) alphabet type
   * We receive the broadcast and open the files.    
   ******************************************************************/

  master_tid = pvm_parent();	/* who's our master? */

  pvm_recv(master_tid, HMMPVM_INIT);
  pvm_upkint(&len, 1, 1);
  hmmfile = MallocOrDie(sizeof(char *) * (len+1));
  pvm_upkstr(hmmfile);
  pvm_upkint(&len, 1, 1);
  seq = MallocOrDie(sizeof(char *) * (len+1));
  pvm_upkstr(seq);
  pvm_upkfloat(&globT, 1, 1);
  pvm_upkdouble(&globE, 1, 1);
  pvm_upkint(&Z, 1, 1);
  pvm_upkint(&do_xnu, 1, 1);
  pvm_upkint(&do_forward, 1, 1);
  pvm_upkint(&do_null2, 1, 1);
  pvm_upkint(&alphatype, 1, 1);

  SetAlphabet(alphatype);
				/* Open HMM file (maybe in HMMERDB) */
  code = HMMPVM_OK;
  if ((hmmfp = HMMFileOpen(hmmfile, "HMMERDB")) == NULL)
    code = HMMPVM_NO_HMMFILE;
  else if (hmmfp->gsi == NULL)
    code = HMMPVM_NO_INDEX;
  
  /* report our status.
   */
  pvm_initsend(PvmDataDefault);
  pvm_pkint(&code, 1, 1);	
  pvm_send(master_tid, HMMPVM_RESULTS);

  dsq = DigitizeSequence(seq, len);
  if (do_xnu) XNU(dsq, len);

  /*****************************************************************
   * Main loop.
   * Receive an integer 0..nhmm-1 for which HMM to search against.
   * If we receive a -1, we shut down. 
   *****************************************************************/ 
  
  for (;;) 
    {
      pvm_recv(master_tid, HMMPVM_WORK);
      pvm_upkint(&nhmm, 1, 1);
      if (my_idx < 0) my_idx = nhmm; /* first time thru, remember what index we are. */

      if (nhmm == -1) break;	/* shutdown signal */

      /* move to our assigned HMM in the HMM file, and read it
       */
      HMMFilePositionByIndex(hmmfp, nhmm);
      if (! HMMFileRead(hmmfp, &hmm)) Die("unexpected end of HMM file"); 
      if (hmm == NULL)                Die("unexpected failure to parse HMM file"); 
      P7Logoddsify(hmm, TRUE);
      
      /* Score sequence, do alignment (Viterbi), recover trace
       */
      if (P7ViterbiSize(len, hmm->M) <= RAMLIMIT)
	{
	  SQD_DPRINTF1(("P7Viterbi(): Estimated size %d Mb\n", P7ViterbiSize(len, hmm->M)));
	  sc = P7Viterbi(dsq, len, hmm, &tr);
	}
      else
	{
	  SQD_DPRINTF1(("P7SmallViterbi() called; %d Mb > %d\n", P7ViterbiSize(len, hmm->M), RAMLIMIT));
	  sc = P7SmallViterbi(dsq, len, hmm, &tr);
	}

      if (do_forward) sc  = P7Forward(dsq, len, hmm, NULL);
      if (do_null2)   sc -= TraceScoreCorrection(hmm, tr, dsq);
	
      pvalue = PValue(hmm, sc);
      send_trace = (sc > globT && pvalue * (float) Z < globE) ? 1 : 0;

      /* return output
       */
      pvm_initsend(PvmDataDefault);
      pvm_pkint(&my_idx, 1, 1);	/* tell master who we are */
      pvm_pkstr(hmm->name);	/* double check that we did the right thing */
      pvm_pkfloat(&sc, 1, 1);
      pvm_pkdouble(&pvalue, 1, 1);
      pvm_pkint(&send_trace, 1, 1); /* flag for whether a trace structure is coming */
      if (send_trace) PVMPackTrace(tr);
      pvm_send(master_tid, HMMPVM_RESULTS);

      /* cleanup
       */
      FreePlan7(hmm);
      P7FreeTrace(tr);
    }

  /*********************************************** 
   * Cleanup, return.
   ***********************************************/

  HMMFileClose(hmmfp);
  free(seq);
  free(dsq);
  free(hmmfile);
  return 0;
}
示例#18
0
/**
 * Description not yet available.
 * \param
 */
void adpvm_unpack(const double& _v)
{
  double& v = (double&) _v;
  pvm_upkdouble(&v,1,1);
}
示例#19
0
void
RecvTime(ArgStruct *p, double *t)
{
    pvm_recv(-1, -1);
    pvm_upkdouble( t, 1, 1 );
}
示例#20
0
/**
 * Description not yet available.
 * \param
 */
void pvm_unpack(const prevariable& _v)
{
  dvariable& v = (dvariable&) _v;
  pvm_upkdouble((double*)(&(value(v))),1,1);
}
示例#21
0
double BBSClient::upkdouble() {
	double x;
	if( pvm_upkdouble(&x, 1, 1)) { perror("upkdouble"); }
	return x;
}