@@ -95,9 +95,11 @@ MPIDI_POSIX_eager_send(int grank, MPIDI_POSIX_am_header_t * msg_hdr, const void
95
95
cell -> type = MPIDI_POSIX_EAGER_IQUEUE_CELL_TYPE_HDR ;
96
96
/* send am_hdr if this is the first segment */
97
97
if (is_topo_local ) {
98
- MPIR_Typerep_copy (payload , am_hdr , am_hdr_sz , MPIR_TYPEREP_FLAG_NONE );
98
+ MPIR_Typerep_copy (payload , am_hdr , am_hdr_sz ,
99
+ MPIR_TYPEREP_FLAG_H2H | MPIR_TYPEREP_FLAG_NONE );
99
100
} else {
100
- MPIR_Typerep_copy (payload , am_hdr , am_hdr_sz , MPIR_TYPEREP_FLAG_STREAM );
101
+ MPIR_Typerep_copy (payload , am_hdr , am_hdr_sz ,
102
+ MPIR_TYPEREP_FLAG_H2H | MPIR_TYPEREP_FLAG_STREAM );
101
103
}
102
104
/* make sure the data region starts at the boundary of MAX_ALIGNMENT */
103
105
payload = payload + resized_am_hdr_sz ;
@@ -114,13 +116,16 @@ MPIDI_POSIX_eager_send(int grank, MPIDI_POSIX_am_header_t * msg_hdr, const void
114
116
* not reliable because the derived datatype could have zero block size which contains no
115
117
* data. */
116
118
if (bytes_sent ) {
117
- if (is_topo_local ) {
118
- MPIR_Typerep_pack (buf , count , datatype , offset , payload , available , & packed_size ,
119
- MPIR_TYPEREP_FLAG_NONE );
120
- } else {
121
- MPIR_Typerep_pack (buf , count , datatype , offset , payload , available , & packed_size ,
122
- MPIR_TYPEREP_FLAG_STREAM );
119
+ int typerep_flags = MPIR_TYPEREP_NONE ;
120
+ if (msg_hdr == MPIDI_POSIX_AM_TYPE__SHORT_HOST
121
+ || msg_hdr == MPIDI_POSIX_AM_TYPE__PIPELINE_HOST ) {
122
+ typerep_flags |= MPIR_TYPEREP_FLAG_H2H ;
123
+ }
124
+ if (!is_topo_local ) {
125
+ typerep_flags |= MPIR_TYPEREP_FLAG_STREAM ;
123
126
}
127
+ MPIR_Typerep_pack (buf , count , datatype , offset , payload , available , & packed_size ,
128
+ typerep_flags );
124
129
cell -> payload_size += packed_size ;
125
130
* bytes_sent = packed_size ;
126
131
}
0 commit comments