Add SRQ support to OpenIB btl, removed old mca param - not used..
This commit was SVN r7585.
Этот коммит содержится в:
родитель
e72e1f0050
Коммит
f46548e691
@ -82,9 +82,6 @@ struct mca_btl_mvapi_component_t {
|
|||||||
opal_mutex_t ib_lock;
|
opal_mutex_t ib_lock;
|
||||||
/**< lock for accessing module state */
|
/**< lock for accessing module state */
|
||||||
|
|
||||||
int ib_mem_registry_hints_log_size;
|
|
||||||
/**< log2 size of hints hash array used by memory registry */
|
|
||||||
|
|
||||||
char* ib_mpool_name;
|
char* ib_mpool_name;
|
||||||
/**< name of ib memory pool */
|
/**< name of ib memory pool */
|
||||||
|
|
||||||
|
@ -121,8 +121,6 @@ int mca_btl_mvapi_component_open(void)
|
|||||||
mca_btl_mvapi_param_register_int ("free_list_max", -1);
|
mca_btl_mvapi_param_register_int ("free_list_max", -1);
|
||||||
mca_btl_mvapi_component.ib_free_list_inc =
|
mca_btl_mvapi_component.ib_free_list_inc =
|
||||||
mca_btl_mvapi_param_register_int ("free_list_inc", 32);
|
mca_btl_mvapi_param_register_int ("free_list_inc", 32);
|
||||||
mca_btl_mvapi_component.ib_mem_registry_hints_log_size =
|
|
||||||
mca_btl_mvapi_param_register_int ("hints_log_size", 8);
|
|
||||||
mca_btl_mvapi_component.ib_mpool_name =
|
mca_btl_mvapi_component.ib_mpool_name =
|
||||||
mca_btl_mvapi_param_register_string("mpool", "mvapi");
|
mca_btl_mvapi_param_register_string("mpool", "mvapi");
|
||||||
mca_btl_mvapi_component.ib_rr_buf_max =
|
mca_btl_mvapi_component.ib_rr_buf_max =
|
||||||
@ -180,7 +178,7 @@ int mca_btl_mvapi_component_open(void)
|
|||||||
mca_btl_mvapi_component.ib_src_path_bits =
|
mca_btl_mvapi_component.ib_src_path_bits =
|
||||||
mca_btl_mvapi_param_register_int("ib_src_path_bits",
|
mca_btl_mvapi_param_register_int("ib_src_path_bits",
|
||||||
0);
|
0);
|
||||||
|
|
||||||
mca_btl_mvapi_component.rd_per_peer =
|
mca_btl_mvapi_component.rd_per_peer =
|
||||||
mca_btl_mvapi_param_register_int("rd_per_peer",
|
mca_btl_mvapi_param_register_int("rd_per_peer",
|
||||||
16);
|
16);
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include "mca/mpool/openib/mpool_openib.h"
|
#include "mca/mpool/openib/mpool_openib.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
mca_btl_openib_module_t mca_btl_openib_module = {
|
mca_btl_openib_module_t mca_btl_openib_module = {
|
||||||
{
|
{
|
||||||
&mca_btl_openib_component.super,
|
&mca_btl_openib_component.super,
|
||||||
@ -118,7 +118,14 @@ int mca_btl_openib_add_procs(
|
|||||||
OPAL_THREAD_UNLOCK(&ib_proc->proc_lock);
|
OPAL_THREAD_UNLOCK(&ib_proc->proc_lock);
|
||||||
peers[i] = ib_peer;
|
peers[i] = ib_peer;
|
||||||
}
|
}
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
if( 0 == openib_btl->num_peers ) {
|
||||||
|
openib_btl->num_peers += nprocs;
|
||||||
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
openib_btl->rd_buf_max = mca_btl_openib_component.ib_rr_buf_max + log2(nprocs) * mca_btl_openib_component.rd_per_peer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,10 +155,10 @@ int mca_btl_openib_register(
|
|||||||
mca_btl_openib_module_t* openib_btl = (mca_btl_openib_module_t*) btl;
|
mca_btl_openib_module_t* openib_btl = (mca_btl_openib_module_t*) btl;
|
||||||
|
|
||||||
|
|
||||||
OPAL_THREAD_LOCK(&ib->btl.ib_lock);
|
OPAL_THREAD_LOCK(&openib->ib_lock);
|
||||||
openib_btl->ib_reg[tag].cbfunc = cbfunc;
|
openib_btl->ib_reg[tag].cbfunc = cbfunc;
|
||||||
openib_btl->ib_reg[tag].cbdata = cbdata;
|
openib_btl->ib_reg[tag].cbdata = cbdata;
|
||||||
OPAL_THREAD_UNLOCK(&ib->btl.ib_lock);
|
OPAL_THREAD_UNLOCK(&openib->ib_lock);
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,7 +368,7 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_src(
|
|||||||
}
|
}
|
||||||
|
|
||||||
iov.iov_len = max_data;
|
iov.iov_len = max_data;
|
||||||
iov.iov_base = (unsigned char*) (frag->segment.seg_addr.lval + reserve);
|
iov.iov_base = (unsigned char*) (unsigned long) (frag->segment.seg_addr.lval + reserve);
|
||||||
|
|
||||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||||
*size = max_data;
|
*size = max_data;
|
||||||
@ -567,6 +574,7 @@ int mca_btl_openib_put( mca_btl_base_module_t* btl,
|
|||||||
{
|
{
|
||||||
struct ibv_send_wr* bad_wr;
|
struct ibv_send_wr* bad_wr;
|
||||||
mca_btl_openib_frag_t* frag = (mca_btl_openib_frag_t*) descriptor;
|
mca_btl_openib_frag_t* frag = (mca_btl_openib_frag_t*) descriptor;
|
||||||
|
mca_btl_openib_module_t* openib_btl = (mca_btl_openib_module_t*) btl;
|
||||||
frag->endpoint = endpoint;
|
frag->endpoint = endpoint;
|
||||||
frag->wr_desc.sr_desc.opcode = IBV_WR_RDMA_WRITE;
|
frag->wr_desc.sr_desc.opcode = IBV_WR_RDMA_WRITE;
|
||||||
frag->wr_desc.sr_desc.send_flags = IBV_SEND_SIGNALED;
|
frag->wr_desc.sr_desc.send_flags = IBV_SEND_SIGNALED;
|
||||||
@ -588,9 +596,17 @@ int mca_btl_openib_put( mca_btl_base_module_t* btl,
|
|||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 1);
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 1);
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_HIGH(openib_btl, 1);
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_LOW(openib_btl, 1);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 1);
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 1);
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -606,6 +622,7 @@ int mca_btl_openib_get( mca_btl_base_module_t* btl,
|
|||||||
{
|
{
|
||||||
struct ibv_send_wr* bad_wr;
|
struct ibv_send_wr* bad_wr;
|
||||||
mca_btl_openib_frag_t* frag = (mca_btl_openib_frag_t*) descriptor;
|
mca_btl_openib_frag_t* frag = (mca_btl_openib_frag_t*) descriptor;
|
||||||
|
mca_btl_openib_module_t* openib_btl = (mca_btl_openib_module_t*) btl;
|
||||||
frag->endpoint = endpoint;
|
frag->endpoint = endpoint;
|
||||||
frag->wr_desc.sr_desc.opcode = IBV_WR_RDMA_READ;
|
frag->wr_desc.sr_desc.opcode = IBV_WR_RDMA_READ;
|
||||||
frag->wr_desc.sr_desc.send_flags = IBV_SEND_SIGNALED;
|
frag->wr_desc.sr_desc.send_flags = IBV_SEND_SIGNALED;
|
||||||
@ -627,8 +644,18 @@ int mca_btl_openib_get( mca_btl_base_module_t* btl,
|
|||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 1);
|
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 1);
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_HIGH(openib_btl, 1);
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_LOW(openib_btl, 1);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 1);
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 1);
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
|
|
||||||
@ -655,7 +682,35 @@ int mca_btl_openib_module_init(mca_btl_openib_module_t *openib_btl)
|
|||||||
strerror(errno)));
|
strerror(errno)));
|
||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
|
||||||
|
struct ibv_srq_init_attr attr;
|
||||||
|
attr.attr.max_wr = mca_btl_openib_component.ib_wq_size;
|
||||||
|
attr.attr.max_sge = mca_btl_openib_component.ib_sg_list_size;
|
||||||
|
|
||||||
|
openib_btl->srr_posted_high = 0;
|
||||||
|
openib_btl->srr_posted_low = 0;
|
||||||
|
|
||||||
|
openib_btl->srq_high = ibv_create_srq(openib_btl->ib_pd, &attr);
|
||||||
|
if(NULL == openib_btl->srq_high) {
|
||||||
|
BTL_ERROR(("error in ibv_create_srq\n"));
|
||||||
|
return OMPI_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
openib_btl->srq_low = ibv_create_srq(openib_btl->ib_pd, &attr);
|
||||||
|
if(NULL == openib_btl->srq_high) {
|
||||||
|
BTL_ERROR(("error in ibv_create_srq\n"));
|
||||||
|
return OMPI_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
openib_btl->srq_high = NULL;
|
||||||
|
openib_btl->srq_low = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Create the low and high priority queue pairs */
|
/* Create the low and high priority queue pairs */
|
||||||
#if OMPI_MCA_BTL_OPENIB_IBV_CREATE_CQ_ARGS == 3
|
#if OMPI_MCA_BTL_OPENIB_IBV_CREATE_CQ_ARGS == 3
|
||||||
openib_btl->ib_cq_low =
|
openib_btl->ib_cq_low =
|
||||||
|
@ -78,9 +78,6 @@ struct mca_btl_openib_component_t {
|
|||||||
opal_mutex_t ib_lock;
|
opal_mutex_t ib_lock;
|
||||||
/**< lock for accessing module state */
|
/**< lock for accessing module state */
|
||||||
|
|
||||||
int ib_mem_registry_hints_log_size;
|
|
||||||
/**< log2 size of hints hash array used by memory registry */
|
|
||||||
|
|
||||||
char* ib_mpool_name;
|
char* ib_mpool_name;
|
||||||
/**< name of ib memory pool */
|
/**< name of ib memory pool */
|
||||||
|
|
||||||
@ -94,7 +91,8 @@ struct mca_btl_openib_component_t {
|
|||||||
size_t max_send_size;
|
size_t max_send_size;
|
||||||
uint32_t leave_pinned;
|
uint32_t leave_pinned;
|
||||||
uint32_t reg_mru_len;
|
uint32_t reg_mru_len;
|
||||||
|
uint32_t use_srq;
|
||||||
|
|
||||||
uint32_t ib_cq_size; /**< Max outstanding CQE on the CQ */
|
uint32_t ib_cq_size; /**< Max outstanding CQE on the CQ */
|
||||||
uint32_t ib_wq_size; /**< Max outstanding WR on the WQ */
|
uint32_t ib_wq_size; /**< Max outstanding WR on the WQ */
|
||||||
uint32_t ib_sg_list_size; /**< Max scatter/gather descriptor entries on the WQ*/
|
uint32_t ib_sg_list_size; /**< Max scatter/gather descriptor entries on the WQ*/
|
||||||
@ -110,8 +108,10 @@ struct mca_btl_openib_component_t {
|
|||||||
uint32_t ib_service_level;
|
uint32_t ib_service_level;
|
||||||
uint32_t ib_static_rate;
|
uint32_t ib_static_rate;
|
||||||
uint32_t ib_src_path_bits;
|
uint32_t ib_src_path_bits;
|
||||||
|
uint32_t rd_per_peer; /* number of receive descriptors to post per log2(peers)
|
||||||
|
in SRQ mode */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}; typedef struct mca_btl_openib_component_t mca_btl_openib_component_t;
|
}; typedef struct mca_btl_openib_component_t mca_btl_openib_component_t;
|
||||||
|
|
||||||
extern mca_btl_openib_component_t mca_btl_openib_component;
|
extern mca_btl_openib_component_t mca_btl_openib_component;
|
||||||
@ -157,6 +157,14 @@ struct mca_btl_openib_module_t {
|
|||||||
bool poll_cq;
|
bool poll_cq;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
struct ibv_srq *srq_high;
|
||||||
|
struct ibv_srq *srq_low;
|
||||||
|
uint32_t srr_posted_high;
|
||||||
|
uint32_t srr_posted_low;
|
||||||
|
#endif
|
||||||
|
uint32_t num_peers;
|
||||||
|
uint32_t rd_buf_max;
|
||||||
|
|
||||||
}; typedef struct mca_btl_openib_module_t mca_btl_openib_module_t;
|
}; typedef struct mca_btl_openib_module_t mca_btl_openib_module_t;
|
||||||
|
|
||||||
@ -389,6 +397,69 @@ extern void mca_btl_openib_send_frag_return(
|
|||||||
int mca_btl_openib_module_init(mca_btl_openib_module_t* openib_btl);
|
int mca_btl_openib_module_init(mca_btl_openib_module_t* openib_btl);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
|
||||||
|
#define MCA_BTL_OPENIB_POST_SRR_HIGH(openib_btl, additional) \
|
||||||
|
{ \
|
||||||
|
OPAL_THREAD_LOCK(&openib_btl->ib_lock); \
|
||||||
|
if(openib_btl->srr_posted_high <= mca_btl_openib_component.ib_rr_buf_min+additional && \
|
||||||
|
openib_btl->srr_posted_high < mca_btl_openib_component.ib_rr_buf_max){ \
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_SUB(mca_btl_openib_component.ib_rr_buf_max - \
|
||||||
|
openib_btl->srr_posted_high, \
|
||||||
|
openib_btl, \
|
||||||
|
&openib_btl->recv_free_eager, \
|
||||||
|
&openib_btl->srr_posted_high, \
|
||||||
|
openib_btl->srq_high); \
|
||||||
|
} \
|
||||||
|
OPAL_THREAD_UNLOCK(&openib_btl->ib_lock); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MCA_BTL_OPENIB_POST_SRR_LOW(openib_btl, additional) \
|
||||||
|
{ \
|
||||||
|
OPAL_THREAD_LOCK(&openib_btl->ib_lock); \
|
||||||
|
if(openib_btl->srr_posted_low <= mca_btl_openib_component.ib_rr_buf_min+additional && \
|
||||||
|
openib_btl->srr_posted_low < mca_btl_openib_component.ib_rr_buf_max){ \
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_SUB(mca_btl_openib_component.ib_rr_buf_max - \
|
||||||
|
openib_btl->srr_posted_low, \
|
||||||
|
openib_btl, \
|
||||||
|
&openib_btl->recv_free_max, \
|
||||||
|
&openib_btl->srr_posted_low, \
|
||||||
|
openib_btl->srq_low); \
|
||||||
|
} \
|
||||||
|
OPAL_THREAD_UNLOCK(&openib_btl->ib_lock); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define MCA_BTL_OPENIB_POST_SRR_SUB(cnt, \
|
||||||
|
openib_btl, \
|
||||||
|
frag_list, \
|
||||||
|
srr_posted, \
|
||||||
|
srq) \
|
||||||
|
{\
|
||||||
|
do { \
|
||||||
|
uint32_t i; \
|
||||||
|
opal_list_item_t* item = NULL; \
|
||||||
|
mca_btl_openib_frag_t* frag = NULL; \
|
||||||
|
struct ibv_recv_wr *bad_wr; \
|
||||||
|
int32_t rc; \
|
||||||
|
for(i = 0; i < cnt; i++) { \
|
||||||
|
OMPI_FREE_LIST_WAIT(frag_list, item, rc); \
|
||||||
|
frag = (mca_btl_openib_frag_t*) item; \
|
||||||
|
frag->sg_entry.length = frag->size + \
|
||||||
|
((unsigned char*) frag->segment.seg_addr.pval- \
|
||||||
|
(unsigned char*) frag->hdr); \
|
||||||
|
if(ibv_post_srq_recv(srq, &frag->wr_desc.rr_desc, &bad_wr)) { \
|
||||||
|
BTL_ERROR(("error posting receive descriptors to shared receive queue: %s",\
|
||||||
|
strerror(errno))); \
|
||||||
|
return OMPI_ERROR; \
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
OPAL_THREAD_ADD32(srr_posted, cnt); \
|
||||||
|
} while(0);\
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "datatype/convertor.h"
|
#include "datatype/convertor.h"
|
||||||
#include "mca/mpool/mvapi/mpool_mvapi.h"
|
#include "mca/mpool/mpool.h"
|
||||||
#include <sysfs/libsysfs.h>
|
#include <sysfs/libsysfs.h>
|
||||||
#include <infiniband/verbs.h>
|
#include <infiniband/verbs.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -124,8 +124,6 @@ int mca_btl_openib_component_open(void)
|
|||||||
mca_btl_openib_param_register_int ("free_list_max", 1024);
|
mca_btl_openib_param_register_int ("free_list_max", 1024);
|
||||||
mca_btl_openib_component.ib_free_list_inc =
|
mca_btl_openib_component.ib_free_list_inc =
|
||||||
mca_btl_openib_param_register_int ("free_list_inc", 32);
|
mca_btl_openib_param_register_int ("free_list_inc", 32);
|
||||||
mca_btl_openib_component.ib_mem_registry_hints_log_size =
|
|
||||||
mca_btl_openib_param_register_int ("hints_log_size", 8);
|
|
||||||
mca_btl_openib_component.ib_mpool_name =
|
mca_btl_openib_component.ib_mpool_name =
|
||||||
mca_btl_openib_param_register_string("mpool", "openib");
|
mca_btl_openib_param_register_string("mpool", "openib");
|
||||||
mca_btl_openib_component.ib_rr_buf_max =
|
mca_btl_openib_component.ib_rr_buf_max =
|
||||||
@ -134,6 +132,8 @@ int mca_btl_openib_component_open(void)
|
|||||||
mca_btl_openib_param_register_int("rr_buf_min", 8);
|
mca_btl_openib_param_register_int("rr_buf_min", 8);
|
||||||
mca_btl_openib_component.reg_mru_len =
|
mca_btl_openib_component.reg_mru_len =
|
||||||
mca_btl_openib_param_register_int("reg_mru_len", 16);
|
mca_btl_openib_param_register_int("reg_mru_len", 16);
|
||||||
|
mca_btl_openib_component.use_srq =
|
||||||
|
mca_btl_openib_param_register_int("use_srq", 0);
|
||||||
|
|
||||||
mca_btl_openib_component.ib_cq_size =
|
mca_btl_openib_component.ib_cq_size =
|
||||||
mca_btl_openib_param_register_int("ib_cq_size",
|
mca_btl_openib_param_register_int("ib_cq_size",
|
||||||
@ -181,7 +181,10 @@ int mca_btl_openib_component_open(void)
|
|||||||
mca_btl_openib_component.ib_src_path_bits =
|
mca_btl_openib_component.ib_src_path_bits =
|
||||||
mca_btl_openib_param_register_int("ib_src_path_bits",
|
mca_btl_openib_param_register_int("ib_src_path_bits",
|
||||||
0);
|
0);
|
||||||
|
mca_btl_openib_component.rd_per_peer =
|
||||||
|
mca_btl_openib_param_register_int("rd_per_peer",
|
||||||
|
16);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mca_btl_openib_module.super.btl_exclusivity =
|
mca_btl_openib_module.super.btl_exclusivity =
|
||||||
@ -229,7 +232,7 @@ int mca_btl_openib_component_close(void)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register MVAPI port information. The MCA framework
|
* Register OPENIB port information. The MCA framework
|
||||||
* will make this available to all peers.
|
* will make this available to all peers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -573,7 +576,7 @@ int mca_btl_openib_component_progress()
|
|||||||
/* Process a RECV */
|
/* Process a RECV */
|
||||||
|
|
||||||
BTL_VERBOSE(("Got an recv on the completion queue"));
|
BTL_VERBOSE(("Got an recv on the completion queue"));
|
||||||
frag = (mca_btl_openib_frag_t*) (void*) wc.wr_id;
|
frag = (mca_btl_openib_frag_t*) (void*) (unsigned long) wc.wr_id;
|
||||||
endpoint = (mca_btl_openib_endpoint_t*) frag->endpoint;
|
endpoint = (mca_btl_openib_endpoint_t*) frag->endpoint;
|
||||||
frag->rc=OMPI_SUCCESS;
|
frag->rc=OMPI_SUCCESS;
|
||||||
frag->segment.seg_len =
|
frag->segment.seg_len =
|
||||||
@ -588,8 +591,17 @@ int mca_btl_openib_component_progress()
|
|||||||
&frag->base,
|
&frag->base,
|
||||||
openib_btl->ib_reg[frag->hdr->tag].cbdata);
|
openib_btl->ib_reg[frag->hdr->tag].cbdata);
|
||||||
|
|
||||||
OPAL_THREAD_ADD32(&endpoint->rr_posted_high, -1);
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(((mca_btl_openib_frag_t*)wc.wr_id)->endpoint, 0);
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
OPAL_THREAD_ADD32(&openib_btl->srr_posted_high, -1);
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_HIGH(openib_btl, 0);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
OPAL_THREAD_ADD32(&endpoint->rr_posted_high, -1);
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(((mca_btl_openib_frag_t*) (void*) (unsigned long) wc.wr_id)->endpoint, 0);
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
}
|
||||||
|
#endif
|
||||||
OMPI_FREE_LIST_RETURN(&(openib_btl->recv_free_eager), (opal_list_item_t*) frag);
|
OMPI_FREE_LIST_RETURN(&(openib_btl->recv_free_eager), (opal_list_item_t*) frag);
|
||||||
count++;
|
count++;
|
||||||
break;
|
break;
|
||||||
@ -599,7 +611,7 @@ int mca_btl_openib_component_progress()
|
|||||||
case IBV_WC_SEND :
|
case IBV_WC_SEND :
|
||||||
|
|
||||||
/* Process a completed send or rdma write*/
|
/* Process a completed send or rdma write*/
|
||||||
frag = (mca_btl_openib_frag_t*) wc.wr_id;
|
frag = (mca_btl_openib_frag_t*) (void*) (unsigned long) wc.wr_id;
|
||||||
frag->rc = OMPI_SUCCESS;
|
frag->rc = OMPI_SUCCESS;
|
||||||
frag->base.des_cbfunc(&openib_btl->super, frag->endpoint, &frag->base, frag->rc);
|
frag->base.des_cbfunc(&openib_btl->super, frag->endpoint, &frag->base, frag->rc);
|
||||||
count++;
|
count++;
|
||||||
@ -632,7 +644,7 @@ int mca_btl_openib_component_progress()
|
|||||||
case IBV_WC_RECV:
|
case IBV_WC_RECV:
|
||||||
/* process a recv completion (this should only occur for a send not an rdma) */
|
/* process a recv completion (this should only occur for a send not an rdma) */
|
||||||
BTL_VERBOSE(( "Got a recv completion"));
|
BTL_VERBOSE(( "Got a recv completion"));
|
||||||
frag = (mca_btl_openib_frag_t*) wc.wr_id;
|
frag = (mca_btl_openib_frag_t*) (void*) (unsigned long) wc.wr_id;
|
||||||
endpoint = (mca_btl_openib_endpoint_t*) frag->endpoint;
|
endpoint = (mca_btl_openib_endpoint_t*) frag->endpoint;
|
||||||
frag->rc=OMPI_SUCCESS;
|
frag->rc=OMPI_SUCCESS;
|
||||||
|
|
||||||
@ -647,8 +659,18 @@ int mca_btl_openib_component_progress()
|
|||||||
&frag->base,
|
&frag->base,
|
||||||
openib_btl->ib_reg[frag->hdr->tag].cbdata);
|
openib_btl->ib_reg[frag->hdr->tag].cbdata);
|
||||||
|
|
||||||
OPAL_THREAD_ADD32(&endpoint->rr_posted_low, -1);
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(((mca_btl_openib_frag_t*)wc.wr_id)->endpoint, 0);
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
OPAL_THREAD_ADD32(&openib_btl->srr_posted_low, -1);
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_LOW(openib_btl, 0);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
OPAL_THREAD_ADD32(&endpoint->rr_posted_low, -1);
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(((mca_btl_openib_frag_t*) (void*)
|
||||||
|
(unsigned long)wc.wr_id)->endpoint, 0);
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
}
|
||||||
|
#endif
|
||||||
OMPI_FREE_LIST_RETURN(&(openib_btl->recv_free_max), (opal_list_item_t*) frag);
|
OMPI_FREE_LIST_RETURN(&(openib_btl->recv_free_max), (opal_list_item_t*) frag);
|
||||||
count++;
|
count++;
|
||||||
break;
|
break;
|
||||||
@ -658,7 +680,7 @@ int mca_btl_openib_component_progress()
|
|||||||
case IBV_WC_SEND :
|
case IBV_WC_SEND :
|
||||||
|
|
||||||
/* Process a completed send */
|
/* Process a completed send */
|
||||||
frag = (mca_btl_openib_frag_t*) wc.wr_id;
|
frag = (mca_btl_openib_frag_t*) (void*) (unsigned long) wc.wr_id;
|
||||||
frag->rc = OMPI_SUCCESS;
|
frag->rc = OMPI_SUCCESS;
|
||||||
frag->base.des_cbfunc(&openib_btl->super, frag->endpoint, &frag->base, frag->rc);
|
frag->base.des_cbfunc(&openib_btl->super, frag->endpoint, &frag->base, frag->rc);
|
||||||
count++;
|
count++;
|
||||||
|
@ -40,6 +40,9 @@ int mca_btl_openib_endpoint_create_qp(
|
|||||||
mca_btl_openib_module_t* openib_btl,
|
mca_btl_openib_module_t* openib_btl,
|
||||||
struct ibv_pd* pd,
|
struct ibv_pd* pd,
|
||||||
struct ibv_cq* cq,
|
struct ibv_cq* cq,
|
||||||
|
#if OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
struct ibv_srq* srq,
|
||||||
|
#endif
|
||||||
struct ibv_qp_attr* qp_attr,
|
struct ibv_qp_attr* qp_attr,
|
||||||
struct ibv_qp** qp
|
struct ibv_qp** qp
|
||||||
);
|
);
|
||||||
@ -95,8 +98,18 @@ static inline int mca_btl_openib_endpoint_post_send(mca_btl_openib_module_t* ope
|
|||||||
BTL_ERROR(("error posting send request errno says %s", strerror(errno)));
|
BTL_ERROR(("error posting send request errno says %s", strerror(errno)));
|
||||||
return OMPI_ERROR;
|
return OMPI_ERROR;
|
||||||
}
|
}
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 1);
|
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 1);
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_HIGH(openib_btl, 1);
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_LOW(openib_btl, 1);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 1);
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 1);
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -268,6 +281,9 @@ static int mca_btl_openib_endpoint_start_connect(mca_btl_base_endpoint_t* endpoi
|
|||||||
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
||||||
openib_btl->ib_pd,
|
openib_btl->ib_pd,
|
||||||
openib_btl->ib_cq_high,
|
openib_btl->ib_cq_high,
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
openib_btl->srq_high,
|
||||||
|
#endif
|
||||||
endpoint->lcl_qp_attr_high,
|
endpoint->lcl_qp_attr_high,
|
||||||
&endpoint->lcl_qp_high))) {
|
&endpoint->lcl_qp_high))) {
|
||||||
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
||||||
@ -280,7 +296,10 @@ static int mca_btl_openib_endpoint_start_connect(mca_btl_base_endpoint_t* endpoi
|
|||||||
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
||||||
openib_btl->ib_pd,
|
openib_btl->ib_pd,
|
||||||
openib_btl->ib_cq_low,
|
openib_btl->ib_cq_low,
|
||||||
endpoint->lcl_qp_attr_low,
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
openib_btl->srq_low,
|
||||||
|
#endif
|
||||||
|
endpoint->lcl_qp_attr_low,
|
||||||
&endpoint->lcl_qp_low))) {
|
&endpoint->lcl_qp_low))) {
|
||||||
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
||||||
return rc;
|
return rc;
|
||||||
@ -316,6 +335,10 @@ static int mca_btl_openib_endpoint_reply_start_connect(mca_btl_openib_endpoint_t
|
|||||||
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
||||||
openib_btl->ib_pd,
|
openib_btl->ib_pd,
|
||||||
openib_btl->ib_cq_high,
|
openib_btl->ib_cq_high,
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
openib_btl->srq_high,
|
||||||
|
#endif
|
||||||
|
|
||||||
endpoint->lcl_qp_attr_high,
|
endpoint->lcl_qp_attr_high,
|
||||||
&endpoint->lcl_qp_high))) {
|
&endpoint->lcl_qp_high))) {
|
||||||
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
||||||
@ -328,6 +351,10 @@ static int mca_btl_openib_endpoint_reply_start_connect(mca_btl_openib_endpoint_t
|
|||||||
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
if(OMPI_SUCCESS != (rc = mca_btl_openib_endpoint_create_qp(openib_btl,
|
||||||
openib_btl->ib_pd,
|
openib_btl->ib_pd,
|
||||||
openib_btl->ib_cq_low,
|
openib_btl->ib_cq_low,
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
openib_btl->srq_low,
|
||||||
|
#endif
|
||||||
|
|
||||||
endpoint->lcl_qp_attr_low,
|
endpoint->lcl_qp_attr_low,
|
||||||
&endpoint->lcl_qp_low))) {
|
&endpoint->lcl_qp_low))) {
|
||||||
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
BTL_ERROR(("error creating queue pair, error code %d", rc));
|
||||||
@ -728,9 +755,18 @@ int mca_btl_openib_endpoint_connect(
|
|||||||
if(rc != OMPI_SUCCESS) {
|
if(rc != OMPI_SUCCESS) {
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 0);
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 0);
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_HIGH(openib_btl, 1);
|
||||||
|
MCA_BTL_OPENIB_POST_SRR_LOW(openib_btl, 1);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_HIGH(endpoint, 1);
|
||||||
|
MCA_BTL_OPENIB_ENDPOINT_POST_RR_LOW(endpoint, 1);
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -745,6 +781,9 @@ int mca_btl_openib_endpoint_create_qp(
|
|||||||
mca_btl_openib_module_t* openib_btl,
|
mca_btl_openib_module_t* openib_btl,
|
||||||
struct ibv_pd* pd,
|
struct ibv_pd* pd,
|
||||||
struct ibv_cq* cq,
|
struct ibv_cq* cq,
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
struct ibv_srq* srq,
|
||||||
|
#endif
|
||||||
struct ibv_qp_attr* qp_attr,
|
struct ibv_qp_attr* qp_attr,
|
||||||
struct ibv_qp** qp
|
struct ibv_qp** qp
|
||||||
)
|
)
|
||||||
@ -762,8 +801,11 @@ int mca_btl_openib_endpoint_create_qp(
|
|||||||
qp_init_attr.cap.max_send_sge = mca_btl_openib_component.ib_sg_list_size;
|
qp_init_attr.cap.max_send_sge = mca_btl_openib_component.ib_sg_list_size;
|
||||||
qp_init_attr.cap.max_recv_sge = mca_btl_openib_component.ib_sg_list_size;
|
qp_init_attr.cap.max_recv_sge = mca_btl_openib_component.ib_sg_list_size;
|
||||||
qp_init_attr.qp_type = IBV_QPT_RC;
|
qp_init_attr.qp_type = IBV_QPT_RC;
|
||||||
|
#ifdef OMPI_MCA_BTL_OPENIB_HAVE_SRQ
|
||||||
|
if(mca_btl_openib_component.use_srq) {
|
||||||
|
qp_init_attr.srq = srq;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
my_qp = ibv_create_qp(pd, &qp_init_attr);
|
my_qp = ibv_create_qp(pd, &qp_init_attr);
|
||||||
|
|
||||||
if(NULL == my_qp) {
|
if(NULL == my_qp) {
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user