Align eager RDMA buffer so that last byte of the buffer is on the last byte of
the CPU cache line. Improves zero byte latency a little bit because of L1 cache miss reduction. This commit was SVN r11465.
Этот коммит содержится в:
родитель
40ca1dd2d4
Коммит
c70eb43e43
@ -562,7 +562,7 @@ btl_openib_component_init(int *num_btl_modules,
|
|||||||
sizeof(mca_btl_openib_footer_t) +
|
sizeof(mca_btl_openib_footer_t) +
|
||||||
openib_btl->super.btl_eager_limit;
|
openib_btl->super.btl_eager_limit;
|
||||||
|
|
||||||
openib_btl->eager_rdma_frag_size = length;
|
openib_btl->eager_rdma_frag_size = (length + mca_btl_openib_component.buffer_alignment) & ~(mca_btl_openib_component.buffer_alignment-1);
|
||||||
|
|
||||||
ompi_free_list_init_ex(&openib_btl->send_free_eager,
|
ompi_free_list_init_ex(&openib_btl->send_free_eager,
|
||||||
length,
|
length,
|
||||||
@ -879,7 +879,7 @@ static int btl_openib_component_progress(void)
|
|||||||
size + sizeof(mca_btl_openib_footer_t));
|
size + sizeof(mca_btl_openib_footer_t));
|
||||||
frag->segment.seg_addr.pval = ((unsigned char* )frag->hdr) +
|
frag->segment.seg_addr.pval = ((unsigned char* )frag->hdr) +
|
||||||
sizeof(mca_btl_openib_header_t);
|
sizeof(mca_btl_openib_header_t);
|
||||||
|
|
||||||
ret = btl_openib_handle_incoming_hp(openib_btl,
|
ret = btl_openib_handle_incoming_hp(openib_btl,
|
||||||
frag->endpoint, frag,
|
frag->endpoint, frag,
|
||||||
size - sizeof(mca_btl_openib_footer_t));
|
size - sizeof(mca_btl_openib_footer_t));
|
||||||
@ -1011,7 +1011,7 @@ static int btl_openib_component_progress(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ne=ibv_poll_cq(openib_btl->ib_cq_lp, 1, &wc );
|
ne=ibv_poll_cq(openib_btl->ib_cq_lp, 1, &wc );
|
||||||
if(ne < 0){
|
if(ne < 0){
|
||||||
BTL_ERROR(("error polling LP CQ with %d errno says %s", ne, strerror(errno)));
|
BTL_ERROR(("error polling LP CQ with %d errno says %s", ne, strerror(errno)));
|
||||||
|
@ -1256,12 +1256,17 @@ void mca_btl_openib_endpoint_connect_eager_rdma(
|
|||||||
|
|
||||||
buf = openib_btl->super.btl_mpool->mpool_alloc(openib_btl->super.btl_mpool,
|
buf = openib_btl->super.btl_mpool->mpool_alloc(openib_btl->super.btl_mpool,
|
||||||
openib_btl->eager_rdma_frag_size *
|
openib_btl->eager_rdma_frag_size *
|
||||||
mca_btl_openib_component.eager_rdma_num, 0, 0,
|
mca_btl_openib_component.eager_rdma_num +
|
||||||
|
mca_btl_openib_component.buffer_alignment +
|
||||||
|
sizeof(mca_btl_openib_recv_frag_eager_t), 0, 0,
|
||||||
(mca_mpool_base_registration_t**)&endpoint->eager_rdma_local.reg);
|
(mca_mpool_base_registration_t**)&endpoint->eager_rdma_local.reg);
|
||||||
|
|
||||||
if(!buf)
|
if(!buf)
|
||||||
goto unlock_rdma_local;
|
goto unlock_rdma_local;
|
||||||
|
|
||||||
|
buf = (char*)(((uintptr_t)buf+mca_btl_openib_component.buffer_alignment) & ~(mca_btl_openib_component.buffer_alignment-1));
|
||||||
|
buf = buf + openib_btl->eager_rdma_frag_size - sizeof(mca_btl_openib_footer_t) - openib_btl->super.btl_eager_limit - sizeof(mca_btl_openib_header_t) - sizeof(mca_btl_openib_frag_t);
|
||||||
|
|
||||||
for(i = 0; i < mca_btl_openib_component.eager_rdma_num; i++) {
|
for(i = 0; i < mca_btl_openib_component.eager_rdma_num; i++) {
|
||||||
ompi_free_list_item_t *item = (ompi_free_list_item_t *)(buf +
|
ompi_free_list_item_t *item = (ompi_free_list_item_t *)(buf +
|
||||||
i*openib_btl->eager_rdma_frag_size);
|
i*openib_btl->eager_rdma_frag_size);
|
||||||
|
@ -78,8 +78,10 @@ typedef enum mca_btl_openib_frag_type_t mca_btl_openib_frag_type_t;
|
|||||||
*/
|
*/
|
||||||
struct mca_btl_openib_frag_t {
|
struct mca_btl_openib_frag_t {
|
||||||
mca_btl_base_descriptor_t base;
|
mca_btl_base_descriptor_t base;
|
||||||
mca_btl_base_segment_t segment;
|
|
||||||
struct mca_btl_base_endpoint_t *endpoint;
|
struct mca_btl_base_endpoint_t *endpoint;
|
||||||
|
mca_btl_openib_footer_t *ftr;
|
||||||
|
mca_btl_openib_header_t *hdr;
|
||||||
|
mca_btl_base_segment_t segment;
|
||||||
size_t size;
|
size_t size;
|
||||||
int rc;
|
int rc;
|
||||||
mca_btl_openib_frag_type_t type;
|
mca_btl_openib_frag_type_t type;
|
||||||
@ -89,8 +91,6 @@ struct mca_btl_openib_frag_t {
|
|||||||
} wr_desc;
|
} wr_desc;
|
||||||
struct ibv_sge sg_entry;
|
struct ibv_sge sg_entry;
|
||||||
struct ibv_mr *mr;
|
struct ibv_mr *mr;
|
||||||
mca_btl_openib_header_t *hdr;
|
|
||||||
mca_btl_openib_footer_t *ftr;
|
|
||||||
mca_mpool_openib_registration_t * openib_reg;
|
mca_mpool_openib_registration_t * openib_reg;
|
||||||
};
|
};
|
||||||
typedef struct mca_btl_openib_frag_t mca_btl_openib_frag_t;
|
typedef struct mca_btl_openib_frag_t mca_btl_openib_frag_t;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user