Skip to content

Commit 1d8ad92

Browse files
bosilcaggouaillardet
authored andcommitted
Add more details about what is going on.
Signed-off-by: George Bosilca <bosilca@icl.utk.edu>
1 parent 88a693b commit 1d8ad92

File tree

1 file changed

+92
-11
lines changed

1 file changed

+92
-11
lines changed

test/datatype/large_data.c

Lines changed: 92 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
/* -*- Mode: C; c-basic-offset:4 ; -*- */
2+
/*
3+
* Copyright (c) 2018 The University of Tennessee and The University
4+
* of Tennessee Research Foundation. All rights
5+
* reserved.
6+
* $COPYRIGHT$
7+
*
8+
* Additional copyrights may follow
9+
*
10+
* $HEADER$
11+
*/
12+
13+
/**
14+
* This test check the correct OMPI datatype description for
15+
* extremely large types (over 4GB).
16+
*/
17+
118
#include <mpi.h>
219
#include <stdio.h>
320
#include <stddef.h>
@@ -13,8 +30,11 @@
1330
#define MAX_IOVEC 10
1431
#define MAX_CHUNK (1024*1024*1024) /* 1GB */
1532

33+
static int verbose = 0;
34+
1635
static size_t
17-
count_length_via_convertor_raw(MPI_Datatype dtype, int count)
36+
count_length_via_convertor_raw(char* msg,
37+
MPI_Datatype dtype, int count)
1838
{
1939
opal_convertor_t* pconv;
2040
struct iovec iov[MAX_IOVEC];
@@ -24,24 +44,41 @@ count_length_via_convertor_raw(MPI_Datatype dtype, int count)
2444
pconv = opal_convertor_create( opal_local_arch, 0 );
2545
opal_convertor_prepare_for_send(pconv, (const struct opal_datatype_t *)dtype, 1, NULL);
2646
while( 0 == opal_convertor_raw(pconv, iov, &iov_count, &length) ) {
27-
printf("iov_count = %d packed_iovec = %"PRIsize_t"\n", iov_count, packed_iovec);
47+
if( verbose ) {
48+
printf("iov_count = %d packed_iovec = %"PRIsize_t" length = %"PRIsize_t"\n",
49+
iov_count, packed_iovec, length);
50+
}
2851
packed += length;
2952
for( i = 0; i < iov_count; i++ ) {
3053
packed_iovec += iov[i].iov_len;
54+
if( verbose ) {
55+
printf("[%s] add %"PRIsize_t" bytes -> so far %"PRIsize_t" bytes\n",
56+
msg, iov[i].iov_len, packed_iovec);
57+
}
3158
}
3259
if( packed != packed_iovec ) {
33-
printf( "Packed send amount diverges %"PRIsize_t" != %"PRIsize_t"\n", packed, packed_iovec);
60+
printf( "[%s] Raw data amount diverges %"PRIsize_t" != %"PRIsize_t"\n",
61+
msg, packed, packed_iovec);
3462
exit(-1);
3563
}
3664
iov_count = MAX_IOVEC; /* number of available iov */
3765
length = MAX_CHUNK;
3866
}
67+
if( verbose ) {
68+
printf("iov_count = %d packed_iovec = %"PRIsize_t" length = %"PRIsize_t"\n",
69+
iov_count, packed_iovec, length);
70+
}
3971
packed += length;
4072
for( i = 0; i < iov_count; i++ ) {
4173
packed_iovec += iov[i].iov_len;
74+
if( verbose ) {
75+
printf("[%s] add %"PRIsize_t" bytes -> so far %"PRIsize_t" bytes\n",
76+
msg, iov[i].iov_len, packed_iovec);
77+
}
4278
}
4379
if( packed != packed_iovec ) {
44-
printf( "Packed send amount diverges %"PRIsize_t" != %"PRIsize_t"\n", packed, packed_iovec);
80+
printf( "[%s] Raw data amount diverges %"PRIsize_t" != %"PRIsize_t"\n",
81+
msg, packed, packed_iovec);
4582
exit(-1);
4683
}
4784
return packed_iovec;
@@ -52,42 +89,86 @@ int main(int argc, char * argv[])
5289

5390
int const per_process = 192;
5491
int const per_type = 20000000;
92+
int blocklen, stride, count;
5593

5694
int scounts[2] = {per_process, per_process};
5795
int sdispls[2] = {3*per_process, 0*per_process};
5896
int rcounts[2] = {per_process, per_process};
5997
int rdispls[2] = {1*per_process, 2*per_process};
6098

6199
MPI_Datatype ddt, stype, rtype;
100+
size_t length, packed;
62101

63102
opal_init_util(&argc, &argv);
64103
ompi_datatype_init();
65104

66105
ompi_datatype_create_contiguous( per_type, MPI_FLOAT, &ddt);
106+
107+
/*
108+
* Large sparse datatype: indexed contiguous
109+
*/
67110
ompi_datatype_create_indexed(2, scounts, sdispls, ddt, &stype);
68111
ompi_datatype_commit(&stype);
69-
ompi_datatype_create_indexed(2, rcounts, rdispls, ddt, &rtype);
70-
ompi_datatype_commit(&rtype);
71112

72-
size_t packed = count_length_via_convertor_raw(stype, 1);
73-
size_t length;
113+
packed = count_length_via_convertor_raw("1. INDEX", stype, 1);
74114
opal_datatype_type_size(&stype->super, &length);
75115
if( length != packed ) {
76116
printf("Mismatched length of packed data to datatype size (%"PRIsize_t" != %"PRIsize_t")\n",
77117
packed, length);
78118
exit(-2);
79119
}
120+
ompi_datatype_destroy(&stype);
80121

81-
packed = count_length_via_convertor_raw(rtype, 1);
122+
/*
123+
* Large contiguous datatype: indexed contiguous
124+
*/
125+
ompi_datatype_create_indexed(2, rcounts, rdispls, ddt, &rtype);
126+
ompi_datatype_commit(&rtype);
127+
128+
packed = count_length_via_convertor_raw("2. INDEX", rtype, 1);
82129
opal_datatype_type_size(&rtype->super, &length);
83130
if( length != packed ) {
84131
printf("Mismatched length of packed data to datatype size (%"PRIsize_t" != %"PRIsize_t")\n",
85132
packed, length);
86133
exit(-2);
87134
}
88-
89-
ompi_datatype_destroy(&stype);
90135
ompi_datatype_destroy(&rtype);
136+
ompi_datatype_destroy(&ddt);
137+
138+
/*
139+
* Large sparse datatype: vector
140+
*/
141+
count = INT_MAX / 2;
142+
blocklen = stride = 4;
143+
ompi_datatype_create_vector(count, blocklen, stride, MPI_FLOAT, &ddt);
144+
ompi_datatype_commit(&ddt);
145+
146+
packed = count_length_via_convertor_raw("3. VECTOR", ddt, 1);
147+
opal_datatype_type_size(&ddt->super, &length);
148+
if( length != packed ) {
149+
printf("Mismatched length of packed data to datatype size (%"PRIsize_t" != %"PRIsize_t")\n",
150+
packed, length);
151+
exit(-2);
152+
}
153+
ompi_datatype_destroy(&ddt);
154+
155+
/*
156+
* Large sparse datatype: contiguous
157+
*/
158+
MPI_Datatype tmp;
159+
ompi_datatype_create_contiguous(stride, MPI_FLOAT, &tmp);
160+
ompi_datatype_create_contiguous(count, tmp, &ddt);
161+
ompi_datatype_commit(&ddt);
162+
163+
packed = count_length_via_convertor_raw("4. CONTIG", ddt, 1);
164+
opal_datatype_type_size(&ddt->super, &length);
165+
if( length != packed ) {
166+
printf("Mismatched length of packed data to datatype size (%"PRIsize_t" != %"PRIsize_t")\n",
167+
packed, length);
168+
exit(-2);
169+
}
170+
ompi_datatype_destroy(&ddt);
171+
ompi_datatype_destroy(&tmp);
91172

92173
return 0;
93174
}

0 commit comments

Comments
 (0)