c3c83aa3e1
bml.h and PML-OB1 for usage. This commit was SVN r6815.
93 строки
4.4 KiB
C
93 строки
4.4 KiB
C
/*
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University.
|
|
* All rights reserved.
|
|
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
|
|
* All rights reserved.
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
* University of Stuttgart. All rights reserved.
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
* All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
/**
|
|
* @file
|
|
*/
|
|
#ifndef MCA_BML_R2_BTL_H
|
|
#define MCA_BML_R2_BTL_H
|
|
|
|
#include "opal/util/output.h"
|
|
#include "mca/btl/btl.h"
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Allocate a descriptor for control message
|
|
*/
|
|
|
|
#if OMPI_HAVE_THREAD_SUPPORT
|
|
#define MCA_BML_R2_BTL_DES_ALLOC(btl, descriptor, size) \
|
|
do { \
|
|
if(NULL != (descriptor = btl->btl_cache)) { \
|
|
/* atomically acquire the cached descriptor */ \
|
|
if(opal_atomic_cmpset_ptr(&btl->btl_cache, descriptor, NULL) == 0) { \
|
|
btl->btl_cache = NULL; \
|
|
} else { \
|
|
descriptor = btl->btl_alloc(btl->btl, sizeof(mca_bml_r2_hdr_t) + \
|
|
MCA_BTL_DES_MAX_SEGMENTS * sizeof(mca_btl_base_segment_t)); \
|
|
} \
|
|
} else { \
|
|
descriptor = btl->btl_alloc(btl->btl, sizeof(mca_bml_r2_hdr_t) + \
|
|
MCA_BTL_DES_MAX_SEGMENTS * sizeof(mca_btl_base_segment_t)); \
|
|
} \
|
|
descriptor->des_src->seg_len = size; \
|
|
} while(0)
|
|
#else
|
|
#define MCA_BML_R2_BTL_DES_ALLOC(btl, descriptor, size) \
|
|
do { \
|
|
if(NULL != (descriptor = btl->btl_cache)) { \
|
|
btl->btl_cache = NULL; \
|
|
} else { \
|
|
descriptor = btl->btl_alloc(btl->btl, sizeof(mca_bml_r2_hdr_t) + \
|
|
MCA_BTL_DES_MAX_SEGMENTS * sizeof(mca_btl_base_segment_t)); \
|
|
} \
|
|
descriptor->des_src->seg_len = size; \
|
|
} while(0)
|
|
#endif
|
|
|
|
/**
|
|
* Return a descriptor
|
|
*/
|
|
|
|
#if OMPI_HAVE_THREAD_SUPPORT
|
|
#define MCA_BML_R2_BTL_DES_RETURN(btl, descriptor) \
|
|
do { \
|
|
if(NULL == btl->btl_cache) { \
|
|
if(opal_atomic_cmpset_ptr(&btl->btl_cache,NULL,descriptor) == 0) { \
|
|
btl->btl_free(btl->btl,descriptor); \
|
|
} \
|
|
} else { \
|
|
btl->btl_free(btl->btl,descriptor); \
|
|
}
|
|
} while(0)
|
|
#else
|
|
#define MCA_BML_R2_BTL_DES_RETURN(btl, descriptor) \
|
|
do { \
|
|
if(NULL == btl->btl_cache) { \
|
|
btl->btl_cache = descriptor; \
|
|
} else { \
|
|
btl->btl_free(endpoint->btl,descriptor); \
|
|
} \
|
|
} while(0)
|
|
#endif
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
}
|
|
#endif
|
|
#endif
|
|
|