/*\ 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; }
/*\ 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; }