1 void _initOnesided( pami_context_t
*contexts
, int nc
);
3 typedef struct _cmi_pami_rzv_rdma_op
{
8 typedef struct _cmi_pami_rzv_rdma
{
11 pami_memregion_t mregion
;
12 CmiPAMIRzvRdmaOp_t rdmaOp
[0];
15 typedef struct _cmi_pami_rzv_rdma_recv_op
{
21 } CmiPAMIRzvRdmaRecvOp_t
;
23 typedef struct _cmi_pami_rzv_rdma_recv
{
29 pami_memregion_t mregion
;
30 CmiPAMIRzvRdmaRecvOp_t rdmaOp
[0];
31 }CmiPAMIRzvRdmaRecv_t
;
33 void ack_rdma_pkt_dispatch (pami_context_t context
,
35 const void * header_addr
,
37 const void * pipe_addr
,
39 pami_endpoint_t origin
,
43 pami_context_t context
,
44 CmiPAMIRzvRdmaRecvOp_t
* recvOpInfo
,
47 void rzv_rdma_recv_done (
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
);
108 size_t dst_context
= 0;
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
;