Rdma support for pamilrts machine layer
[charm.git] / src / arch / pamilrts / machine-onesided.h
blob13ecc7fc4f69ffe31a17b17347565bb731846dad
1 void _initOnesided( pami_context_t *contexts, int nc);
3 typedef struct _cmi_pami_rzv_rdma_op {
4 int offset;
5 int size;
6 } CmiPAMIRzvRdmaOp_t;
8 typedef struct _cmi_pami_rzv_rdma{
9 int numOps;
10 size_t dstContext;
11 pami_memregion_t mregion;
12 CmiPAMIRzvRdmaOp_t rdmaOp[0];
13 } CmiPAMIRzvRdma_t;
15 typedef struct _cmi_pami_rzv_rdma_recv_op {
16 void * buffer;
17 void * src_info;
18 int offset;
19 int size;
20 int opIndex;
21 } CmiPAMIRzvRdmaRecvOp_t;
23 typedef struct _cmi_pami_rzv_rdma_recv {
24 int src_ep;
25 int numOps;
26 int comOps;
27 void* msg;
28 size_t dstContext;
29 pami_memregion_t mregion;
30 CmiPAMIRzvRdmaRecvOp_t rdmaOp[0];
31 }CmiPAMIRzvRdmaRecv_t;
33 void ack_rdma_pkt_dispatch (pami_context_t context,
34 void * clientdata,
35 const void * header_addr,
36 size_t header_size,
37 const void * pipe_addr,
38 size_t pipe_size,
39 pami_endpoint_t origin,
40 pami_recv_t * recv);
42 void rdma_sendAck (
43 pami_context_t context,
44 CmiPAMIRzvRdmaRecvOp_t* recvOpInfo,
45 int src_ep);
47 void rzv_rdma_recv_done (
48 pami_context_t ctxt,
49 void * clientdata,
50 pami_result_t result);
52 int LrtsGetRdmaOpInfoSize(){
53 return sizeof(CmiPAMIRzvRdmaOp_t);
55 int LrtsGetRdmaGenInfoSize(){
56 return sizeof(CmiPAMIRzvRdma_t);
58 int LrtsGetRdmaInfoSize(int numOps){
59 return sizeof(CmiPAMIRzvRdma_t) + numOps * sizeof(CmiPAMIRzvRdmaOp_t);
62 int LrtsGetRdmaOpRecvInfoSize(){
63 return sizeof(CmiPAMIRzvRdmaRecvOp_t);
66 int LrtsGetRdmaGenRecvInfoSize(){
67 return sizeof(CmiPAMIRzvRdmaRecv_t);
70 int LrtsGetRdmaRecvInfoSize(int numOps){
71 return sizeof(CmiPAMIRzvRdmaRecv_t) + numOps * sizeof(CmiPAMIRzvRdmaRecvOp_t);
74 void LrtsSetRdmaRecvInfo(void *rdmaRecv, int numOps, void *msg, void *rdmaSend){
76 CmiPAMIRzvRdmaRecv_t *rdmaRecvInfo = (CmiPAMIRzvRdmaRecv_t *)rdmaRecv;
77 CmiPAMIRzvRdma_t *rdmaSendInfo = (CmiPAMIRzvRdma_t *)rdmaSend;
79 rdmaRecvInfo->numOps = numOps;
80 rdmaRecvInfo->comOps = 0;
81 rdmaRecvInfo->msg = msg;
83 rdmaRecvInfo->dstContext = rdmaSendInfo->dstContext;
84 memcpy(&rdmaRecvInfo->mregion, &rdmaSendInfo->mregion, sizeof(pami_memregion_t));
87 void LrtsSetRdmaRecvOpInfo(void *rdmaRecvOp, void *buffer, void *src_ref, int size, int opIndex, void *rdmaSend){
88 CmiPAMIRzvRdmaRecvOp_t *rdmaRecvOpInfo = (CmiPAMIRzvRdmaRecvOp_t *)rdmaRecvOp;
89 CmiPAMIRzvRdma_t *rdmaSendInfo = (CmiPAMIRzvRdma_t *)rdmaSend;
91 rdmaRecvOpInfo->buffer = buffer;
92 rdmaRecvOpInfo->src_info = src_ref;
93 rdmaRecvOpInfo->size = size;
94 rdmaRecvOpInfo->opIndex = opIndex;
96 rdmaRecvOpInfo->offset = rdmaSendInfo->rdmaOp[opIndex].offset;
100 void LrtsSetRdmaInfo(void *dest, int destPE, int numOps){
102 CmiPAMIRzvRdma_t *rdma = (CmiPAMIRzvRdma_t*)dest;
103 int rank = CmiRankOf(destPE);
105 #if CMK_PAMI_MULTI_CONTEXT && CMK_NODE_QUEUE_AVAILABLE
106 size_t dst_context = (rank != DGRAM_NODEMESSAGE) ? (rank>>LTPS) : (rand_r(&r_seed) % cmi_pami_numcontexts);
107 #else
108 size_t dst_context = 0;
109 #endif
111 rdma->dstContext = dst_context;
112 memcpy(&rdma->mregion, &cmi_pami_memregion[0].mregion, sizeof(pami_memregion_t));
113 rdma->numOps = numOps;
116 void LrtsSetRdmaOpInfo(void *dest, void *ptr, int size){
117 CmiPAMIRzvRdmaOp_t *rdmaOp = (CmiPAMIRzvRdmaOp_t *)dest;
118 rdmaOp->offset = (size_t)(ptr) - (size_t)cmi_pami_memregion[0].baseVA;
119 rdmaOp->size = size;