This source file includes following definitions.
- opal_datatype_is_monotonic
1
2
3
4
5
6
7
8
9
10
11
12 #include "opal_config.h"
13
14 #include <stddef.h>
15
16 #include "opal/constants.h"
17 #include "opal/datatype/opal_datatype.h"
18 #include "opal/datatype/opal_datatype_internal.h"
19 #include "opal/datatype/opal_convertor.h"
20
21 int32_t opal_datatype_is_monotonic(opal_datatype_t* type )
22 {
23 opal_convertor_t *pConv;
24 uint32_t iov_count;
25 struct iovec iov[5];
26 size_t max_data = 0;
27 long prev = -1;
28 int rc;
29 bool monotonic = true;
30
31 pConv = opal_convertor_create( opal_local_arch, 0 );
32 if (OPAL_UNLIKELY(NULL == pConv)) {
33 return 0;
34 }
35 rc = opal_convertor_prepare_for_send( pConv, type, 1, NULL );
36 if( OPAL_UNLIKELY(OPAL_SUCCESS != rc)) {
37 OBJ_RELEASE(pConv);
38 return 0;
39 }
40
41 do {
42 iov_count = 5;
43 rc = opal_convertor_raw( pConv, iov, &iov_count, &max_data);
44 for (uint32_t i=0; i<iov_count; i++) {
45 if ((long)iov[i].iov_base < prev) {
46 monotonic = false;
47 goto cleanup;
48 }
49 prev = (long)iov[i].iov_base;
50 }
51 } while (rc != 1);
52
53 cleanup:
54 OBJ_RELEASE( pConv );
55
56 return monotonic;
57 }