1
1

* assert() that endianness doesn't need to change if we are sending RDMA headers

around, since OB1 currently doesn't do the right thing there, but that should
  not happen in the near future because the R2 BML should not make any RDMA
  networks available between machines with different architectures
* Clean up the #ifs a little bit so that we don't do unneeded work when
  on big endian machines and heterogeneous support is disabled...

This commit was SVN r9184.
Этот коммит содержится в:
Brian Barrett 2006-02-28 19:54:46 +00:00
родитель 80bc1850bf
Коммит 1479a90b39
3 изменённых файлов: 51 добавлений и 21 удалений

Просмотреть файл

@ -94,7 +94,10 @@ void mca_pml_ob1_recv_frag_callback(
case MCA_PML_OB1_HDR_TYPE_RGET:
{
#if !defined(WORDS_BIGENDIAN) && OMPI_ENABLE_HETEROGENEOUS_SUPPORT
/* BWB - FIX ME - Tim, what do I do with rget? */
/* RDMA is currently disabled by bml if arch doesn't
match, so this shouldn't be needed. here to make sure
we remember if we ever change the bml. */
assert(0 == (hdr->hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_NBO));
#endif
mca_pml_ob1_recv_frag_match(btl, &hdr->hdr_match, segments,des->des_dst_cnt);
break;
@ -131,7 +134,10 @@ void mca_pml_ob1_recv_frag_callback(
{
mca_pml_ob1_send_request_t* sendreq;
#if !defined(WORDS_BIGENDIAN) && OMPI_ENABLE_HETEROGENEOUS_SUPPORT
/* BWB - FIX ME - Tim, what do I do with rdma headers? */
/* RDMA is currently disabled by bml if arch doesn't
match, so this shouldn't be needed. here to make sure
we remember if we ever change the bml. */
assert(0 == (hdr->hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_NBO));
#endif
sendreq = (mca_pml_ob1_send_request_t*)
hdr->hdr_rdma.hdr_req.pval;

Просмотреть файл

@ -265,9 +265,10 @@ static void mca_pml_ob1_recv_request_ack(
ack->hdr_dst_req.pval = recvreq;
ack->hdr_rdma_offset = recvreq->req_rdma_offset;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
ack->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -275,6 +276,7 @@ static void mca_pml_ob1_recv_request_ack(
ack->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_ACK_HDR_HTON(*ack);
}
#endif
#endif
/* initialize descriptor */
@ -364,9 +366,10 @@ static void mca_pml_ob1_rget_completion(
hdr->hdr_common.hdr_type = MCA_PML_OB1_HDR_TYPE_FIN;
hdr->hdr_des = frag->rdma_hdr.hdr_rget.hdr_des;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -375,7 +378,7 @@ static void mca_pml_ob1_rget_completion(
MCA_PML_OB1_FIN_HDR_HTON(*hdr);
}
#endif
#endif
/* queue request */
rc = mca_bml_base_send(
bml_btl,
@ -741,15 +744,19 @@ void mca_pml_ob1_recv_request_schedule(mca_pml_ob1_recv_request_t* recvreq)
hdr->hdr_seg_cnt = dst->des_dst_cnt;
memcpy(hdr->hdr_segs, dst->des_dst, dst->des_dst_cnt * sizeof(mca_btl_base_segment_t));
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
if (recvreq->req_recv.req_base.req_proc->proc_arch & OMPI_ARCH_ISBIGENDIAN) {
/* BWB - FIX ME - TIM, what do we do here? */
}
/* RDMA is currently disabled by bml if arch doesn't
match, so this shouldn't be needed. here to make sure
we remember if we ever change the bml. */
assert(0 == (recvreq->req_recv.req_base.req_proc->proc_arch &
OMPI_ARCH_ISBIGENDIAN));
#endif
#endif
/* update request state */

Просмотреть файл

@ -337,9 +337,10 @@ int mca_pml_ob1_send_request_start_buffered(
hdr->hdr_rndv.hdr_msg_length = sendreq->req_send.req_bytes_packed;
hdr->hdr_rndv.hdr_src_req.pval = sendreq;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -347,6 +348,7 @@ int mca_pml_ob1_send_request_start_buffered(
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_RNDV_HDR_HTON(hdr->hdr_rndv);
}
#endif
#endif
/* update lengths */
@ -450,9 +452,10 @@ int mca_pml_ob1_send_request_start_copy(
hdr->hdr_match.hdr_tag = sendreq->req_send.req_base.req_tag;
hdr->hdr_match.hdr_seq = sendreq->req_send.req_base.req_sequence;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -460,6 +463,7 @@ int mca_pml_ob1_send_request_start_copy(
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_MATCH_HDR_HTON(hdr->hdr_match);
}
#endif
#endif
/* update lengths */
@ -522,9 +526,10 @@ int mca_pml_ob1_send_request_start_prepare(
hdr->hdr_match.hdr_tag = sendreq->req_send.req_base.req_tag;
hdr->hdr_match.hdr_seq = sendreq->req_send.req_base.req_sequence;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -532,6 +537,7 @@ int mca_pml_ob1_send_request_start_prepare(
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_MATCH_HDR_HTON(hdr->hdr_match);
}
#endif
#endif
/* short message */
@ -616,16 +622,19 @@ int mca_pml_ob1_send_request_start_rdma(
hdr->hdr_rget.hdr_des.pval = src;
hdr->hdr_rget.hdr_seg_cnt = src->des_src_cnt;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
if (sendreq->req_send.req_base.req_proc->proc_arch & OMPI_ARCH_ISBIGENDIAN) {
/* BWB - FIX ME - Ask Tim what we are supposed to do in this case */
return OMPI_ERR_NOT_SUPPORTED;
}
/* RDMA is currently disabled by bml if arch doesn't
match, so this shouldn't be needed. here to make sure
we remember if we ever change the bml. */
assert(0 == (sendreq->req_send.req_base.req_proc->proc_arch &
OMPI_ARCH_ISBIGENDIAN));
#endif
#endif
for(i=0; i<src->des_src_cnt; i++)
@ -655,9 +664,10 @@ int mca_pml_ob1_send_request_start_rdma(
hdr->hdr_rndv.hdr_msg_length = sendreq->req_send.req_bytes_packed;
hdr->hdr_rndv.hdr_src_req.pval = sendreq;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -665,6 +675,7 @@ int mca_pml_ob1_send_request_start_rdma(
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_RNDV_HDR_HTON(hdr->hdr_rndv);
}
#endif
#endif
/* update lengths with number of bytes actually packed */
@ -736,9 +747,10 @@ int mca_pml_ob1_send_request_start_rndv(
hdr->hdr_rndv.hdr_msg_length = sendreq->req_send.req_bytes_packed;
hdr->hdr_rndv.hdr_src_req.pval = sendreq;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -746,6 +758,7 @@ int mca_pml_ob1_send_request_start_rndv(
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_RNDV_HDR_HTON(hdr->hdr_rndv);
}
#endif
#endif
/* first fragment of a long message */
@ -870,9 +883,10 @@ int mca_pml_ob1_send_request_schedule(mca_pml_ob1_send_request_t* sendreq)
hdr->hdr_src_req.pval = sendreq;
hdr->hdr_dst_req = sendreq->req_recv;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -880,6 +894,7 @@ int mca_pml_ob1_send_request_schedule(mca_pml_ob1_send_request_t* sendreq)
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_FRAG_HDR_HTON(*hdr);
}
#endif
#endif
/* update state */
@ -983,9 +998,10 @@ static void mca_pml_ob1_put_completion(
hdr->hdr_common.hdr_type = MCA_PML_OB1_HDR_TYPE_FIN;
hdr->hdr_des = frag->rdma_hdr.hdr_rdma.hdr_des;
#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#ifdef WORDS_BIGENDIAN
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
#elif OMPI_ENABLE_HETEROGENEOUS_SUPPORT
#else
/* if we are little endian and the remote side is big endian,
we're responsible for making sure the data is in network byte
order */
@ -993,6 +1009,7 @@ static void mca_pml_ob1_put_completion(
hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
MCA_PML_OB1_FIN_HDR_HTON(*hdr);
}
#endif
#endif
/* queue request */