int main( int argc, char* argv[] ) { ddt_segment_t* segments; int *send_buffer, *recv_buffer; int i, seg_count, errors; int show_only_first_error = 1; ompi_datatype_t* datatype = MPI_DATATYPE_NULL; #define NELT (300) send_buffer = malloc(NELT*sizeof(int)); recv_buffer = malloc(NELT*sizeof(int)); for (i = 0; i < NELT; ++i) { send_buffer[i] = i; recv_buffer[i] = 0xdeadbeef; } opal_init_util (NULL, NULL); ompi_datatype_init(); ompi_datatype_create_vector(NELT/2, 1, 2, MPI_INT, &datatype); ompi_datatype_commit(&datatype); #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, 1, fragment_size, &segments, &seg_count ); /* shuffle the segments */ shuffle_segments( segments, seg_count ); /* pack the data */ pack_segments( datatype, 1, fragment_size, segments, seg_count, send_buffer ); /* unpack the data back in the user space (recv buffer) */ unpack_segments( datatype, 1, fragment_size, segments, seg_count, recv_buffer ); /* And now check the data */ for( errors = i = 0; i < NELT; i++ ) { int expected = ((i % 2) ? (int)0xdeadbeef : i); if (recv_buffer[i] != expected) { if( (show_only_first_error && (0 == errors)) || !show_only_first_error ) { printf("error at index %4d: 0x%08x != 0x%08x\n", i, recv_buffer[i], expected); } 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(); opal_finalize_util (); return (0 == errors ? 0 : -1); }
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); }