Пример #1
0
/*\ for request stored in buf, save local strided descriptor and return  req id
\*/
int _armci_asyn_init_strided_get(void *buf, void *ptr,int levels, int stride[],
                                 int count[])
{
int id, i;
int dsc_id=_armci_buf_to_index(buf);
strided_dscr_t *dscr;       
       
   dscr = &armci_pending_dscr[dsc_id].dscr.strided;
   dscr->stride_levels = levels;

   dscr->ptr =ptr;
   for(i=0;i<levels;i++)dscr->stride_arr[i]=stride[i];
   for(i=0;i<levels+1;i++)dscr->count[i]=count[i];

   /* convert bufid into req id returned to user */
   id = dsc_id;
   id <<= 8;  /* buffer id is in second byte */
   cur_id = (cur_id+1)%255 +1; /* counter in LSB */
   id += cur_id;
   armci_pending_dscr[dsc_id].reqid = id;

   if(DEBUG_){
      printf("%d: init strided get: ptr=%p reqid=%d bufid=%d cid=%d levels=%d count[0]=%d\n",
             armci_me,ptr,id,dsc_id, cur_id, levels,count[0]); fflush(stdout);
   }

   return id;
}    
Пример #2
0
/*\ client sends request message to server
\*/
int armci_send_req_msg(int proc, void *buf, int bytes)
{
    int cluster = armci_clus_id(proc);
    request_header_t* msginfo = (request_header_t*)buf;
    int idx, rc;

    THREAD_LOCK(armci_user_threads.net_lock);

    /* mark sockets as active (only if reply is expected?) */
    idx = _armci_buf_to_index(msginfo);
    _armci_active_socks->socks[idx] = SRV_sock[cluster];

    rc = (armci_WriteToSocket(SRV_sock[cluster], buf, bytes) < 0);

    THREAD_UNLOCK(armci_user_threads.net_lock);

    return rc;
}