0ccfd3e6db
- re-enable sendi - move smsg common code into btl_ugni_smsg.h - added new parameters for smsg/eager frags - use get for frags larger than the smsg_limit - bug fixes - code cleanup This commit was SVN r25897.
102 строки
3.7 KiB
C
102 строки
3.7 KiB
C
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
|
/*
|
|
* Copyright (c) 2011-2012 Los Alamos National Security, LLC. All rights
|
|
* reserved.
|
|
* Copyright (c) 2011 UT-Battelle, LLC. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#if !defined(MCA_BTL_UGNI_RDMA_H)
|
|
#define MCA_BTL_UGNI_RDMA_H
|
|
|
|
#include "btl_ugni.h"
|
|
#include "btl_ugni_frag.h"
|
|
|
|
static inline void
|
|
mca_btl_ugni_post_frag_complete (ompi_common_ugni_post_desc_t *desc, int rc) {
|
|
mca_btl_ugni_base_frag_t *frag = MCA_BTL_UGNI_DESC_TO_FRAG(desc);
|
|
|
|
/* always call put/get callback (if one is set) */
|
|
if (NULL != frag->base.des_cbfunc) {
|
|
frag->base.des_cbfunc(&frag->endpoint->btl->super, frag->endpoint, &frag->base, rc);
|
|
}
|
|
|
|
if (OPAL_LIKELY(frag->base.des_flags & MCA_BTL_DES_FLAGS_BTL_OWNERSHIP)) {
|
|
mca_btl_ugni_frag_return (frag);
|
|
}
|
|
}
|
|
|
|
static inline int init_gni_post_desc(mca_btl_ugni_base_frag_t *frag,
|
|
gni_post_type_t op_type,
|
|
uint64_t lcl_addr,
|
|
gni_mem_handle_t *lcl_mdh,
|
|
uint64_t rem_addr,
|
|
gni_mem_handle_t *rem_mdh,
|
|
uint64_t bufsize,
|
|
gni_cq_handle_t cq_hndl) {
|
|
frag->post_desc.base.type = op_type;
|
|
frag->post_desc.base.cq_mode = GNI_CQMODE_GLOBAL_EVENT;
|
|
frag->post_desc.base.dlvr_mode = GNI_DLVMODE_PERFORMANCE;
|
|
frag->post_desc.base.local_addr = (uint64_t) lcl_addr;
|
|
frag->post_desc.base.local_mem_hndl = *lcl_mdh;
|
|
frag->post_desc.base.remote_addr = (uint64_t) rem_addr;
|
|
frag->post_desc.base.remote_mem_hndl = *rem_mdh;
|
|
frag->post_desc.base.length = bufsize;
|
|
frag->post_desc.base.rdma_mode = 0;
|
|
frag->post_desc.base.src_cq_hndl = cq_hndl;
|
|
|
|
frag->post_desc.cbfunc = mca_btl_ugni_post_frag_complete;
|
|
frag->post_desc.endpoint = frag->endpoint->common;
|
|
frag->post_desc.tries = 0;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static inline int mca_btl_ugni_post_fma (mca_btl_ugni_base_frag_t *frag, gni_post_type_t op_type,
|
|
mca_btl_base_segment_t *lcl_seg, mca_btl_base_segment_t *rem_seg)
|
|
{
|
|
int rc;
|
|
|
|
/* Post descriptor */
|
|
init_gni_post_desc (frag, op_type, lcl_seg->seg_addr.lval,
|
|
(gni_mem_handle_t *)&lcl_seg->seg_key.key64,
|
|
rem_seg->seg_addr.lval, (gni_mem_handle_t *)&rem_seg->seg_key.key64,
|
|
lcl_seg->seg_len, 0);
|
|
|
|
rc = GNI_PostFma (frag->endpoint->common->ep_handle, &frag->post_desc.base);
|
|
if (GNI_RC_SUCCESS != rc) {
|
|
BTL_ERROR(("GNI_PostFma failed with rc = %d", rc));
|
|
assert(rc < 4);
|
|
rc = OMPI_ERR_OUT_OF_RESOURCE;
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
static inline int mca_btl_ugni_post_bte (mca_btl_ugni_base_frag_t *frag, gni_post_type_t op_type,
|
|
mca_btl_base_segment_t *lcl_seg, mca_btl_base_segment_t *rem_seg)
|
|
{
|
|
int rc;
|
|
|
|
/* Post descriptor */
|
|
init_gni_post_desc (frag, op_type, lcl_seg->seg_addr.lval,
|
|
(gni_mem_handle_t *)&lcl_seg->seg_key.key64,
|
|
rem_seg->seg_addr.lval, (gni_mem_handle_t *)&rem_seg->seg_key.key64,
|
|
lcl_seg->seg_len, frag->endpoint->btl->bte_local_cq);
|
|
|
|
rc = GNI_PostRdma (frag->endpoint->common->ep_handle, &frag->post_desc.base);
|
|
if (GNI_RC_SUCCESS != rc) {
|
|
assert(rc < 4);
|
|
rc = ompi_common_rc_ugni_to_ompi (rc);
|
|
BTL_ERROR(("GNI_PostRdma failed with rc = %d", rc));
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
#endif /* MCA_BTL_UGNI_RDMA_H */
|