Example #1
0
static
int run_pp_c(int msize, int loops)
{
	int cnt;
	assert(msize <= MAX_MSIZE);

	ELAN_EVENT *event = NULL;

	for (cnt = 0; cnt < loops; cnt++) {
		unsigned len = msize;

		s_buf->len = len;
		s_buf->mark = 1;
		r_buf->mark = 0;

		event = elan_put(base->state,
				 s_buf->buf - len,
				 remote_rbuf->buf - len,
				 len + TAIL_SIZE,
				 RANK_SERVER);
		elan_wait(event, base->waitType);
		while (r_buf->mark != 1) idle();
	}
	return 0;
}
Example #2
0
static
void run_pp_server(void)
{
	ELAN_EVENT *event = NULL;

	while (1) {
		while (r_buf->mark != 1) idle();

		unsigned len = r_buf->len;

		//memcpy(s_buf->buf - len, r_buf->buf - len, len);

		s_buf->len = len;
		s_buf->mark = 1;
		r_buf->mark = 0;

		event = elan_put(base->state,
				 s_buf->buf - len,
				 remote_rbuf->buf - len,
				 len + TAIL_SIZE,
				 RANK_CLIENT);

		elan_wait(event, base->waitType);
	}

}
Example #3
0
/*\ blocking vector put
\*/
void armcill_putv(int proc, int bytes, int count, void* src[], void* dst[])
{
int _j, i, batch, issued=0;
void *ps, *pd;

#if 0
    printf("%d: putv %d\n", armci_me, count); fflush(stdout);
#endif

    for (_j = 0;  _j < count;  ){
      /* how big a batch of requests can we issue */
      batch = (count - _j )<max_pending ? count - _j : max_pending; 
      _j += batch;
      for(i=0; i< batch; i++){
        if(put_dscr[cur_put])elan_wait(put_dscr[cur_put],100); 
        else pending_put++;
        ps = src[issued];
        pd = dst[issued];
        put_dscr[cur_put]= elan_put(elan_base->state,ps, pd,(size_t)bytes,proc);
        issued++;
        cur_put++;
        if(cur_put>=max_pending)cur_put=0;
      }
    }
    if(issued != count) 
       armci_die2("armci-elan putv:mismatch\n", count,issued);

    for(i=0; i<max_pending; i++) if(put_dscr[i]){
        elan_wait(put_dscr[i],100);
        put_dscr[i]=(ELAN_EVENT*)0;
    }
}
Example #4
0
static inline
void pselan_flush_sendbuf(pselan_con_info_t *ci,
			  char *lmem /* ci->send_bufs.lmr_mem */,
			  char *rmem, unsigned size)
{
	ELAN_EVENT *event;

	event = elan_put(pselan_base_state,
			 lmem,
			 rmem,
			 size, ci->remote_destvp);

	pselan_queue_event(ci, event);
}
Example #5
0
/*\ strided put, nonblocking
\*/
void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride,
                                                   void* dst_ptr,int dst_stride)
{
int _j, i, batch, issued=0;
char *ps=src_ptr, *pd=dst_ptr;

#if 1
    for (_j = 0;  _j < count;  ){
      /* how big a batch of requests can we issue */
      batch = (count - _j )<max_pending ? count - _j : max_pending; 
      _j += batch;
      for(i=0; i< batch; i++){
        if(put_dscr[cur_put])elan_wait(put_dscr[cur_put],100); 
        else pending_put++;
#if 1
        put_dscr[cur_put]= elan_put(elan_base->state,ps, pd,(size_t)bytes,proc);
#else
        elan_wait(elan_put(elan_base->state, ps, pd, (size_t)bytes, proc),1000);
#endif
        issued++;
        ps += src_stride;
        pd += dst_stride;
        cur_put++;
        if(cur_put>=max_pending)cur_put=0;
      }
    }

    if(issued != count) 
       armci_die2("armci-elan put:mismatch %d %d \n", count,issued);
#else
     for (_j = 0;  _j < count;  _j++){
       elan_wait(elan_put(elan_base->state, ps, pd, (size_t)bytes, proc),1000);
       ps += src_stride;
       pd += dst_stride;
     }
#endif
}