void arg_dump(PACKET *packet, int i) { PACKET_ARG *arg = packet->args[i]; printf("arg[%i] length = %i\n", i, arg->length); printf("arg[%i] data:\n", i); bytes_dump(arg->arg, arg->length); }
int main( int argc, char* argv[] ) { ddt_segment_t* segments; ddt_ldi_t *send_buffer, *recv_buffer; int i, seg_count, errors; int show_only_first_error = 1; ompi_datatype_t* datatype = MPI_LONG_DOUBLE_INT; send_buffer = malloc( sizeof(ddt_ldi_t) * data_count ); recv_buffer = malloc( sizeof(ddt_ldi_t) * data_count ); for( i = 0; i < data_count; i++ ) { send_buffer[i].ld = (long double)i + (long double)i / 100000.0; send_buffer[i].i = i; } memcpy(recv_buffer, send_buffer, sizeof(ddt_ldi_t) * data_count ); opal_datatype_init(); ompi_datatype_init(); #if (OPAL_ENABLE_DEBUG == 1) && (OPAL_C_HAVE_VISIBILITY == 0) opal_unpack_debug = false; opal_pack_debug = false; opal_position_debug = false; #endif /* OPAL_ENABLE_DEBUG */ create_segments( datatype, data_count, fragment_size, &segments, &seg_count ); /* shuffle the segments */ shuffle_segments( segments, seg_count ); /* pack the data */ pack_segments( datatype, data_count, fragment_size, segments, seg_count, send_buffer ); /* unpack the data back in the user space (recv buffer) */ unpack_segments( datatype, data_count, fragment_size, segments, seg_count, recv_buffer ); /* And now check the data */ for( errors = i = 0; i < data_count; i++ ) { /*if( !bytes_equal(&send_buffer[i].ld, &recv_buffer[i].ld, sizeof(long double)) ||*/ if( (send_buffer[i].ld != recv_buffer[i].ld) || (send_buffer[i].i != recv_buffer[i].i) ) { if( (show_only_first_error && (0 == errors)) || !show_only_first_error ) { printf( "error at %4d [*(%s,%d)\n" " != (%s,%d)\n", i, bytes_dump( &send_buffer[i].ld, sizeof(long double)), send_buffer[i].i, bytes_dump( &recv_buffer[i].ld, sizeof(long double)), recv_buffer[i].i ); } errors++; } } printf( "Found %d errors\n", errors ); free(send_buffer); free(recv_buffer); for( i = 0; i < seg_count; i++ ) { free( segments[i].buffer ); } free(segments); ompi_datatype_finalize(); return (0 == errors ? 0 : -1); }