This source file includes following definitions.
- MPI_T_init_thread
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "ompi/mpi/tool/mpit-internal.h"
15
16 #include "ompi/runtime/ompi_info_support.h"
17 #include "opal/include/opal/sys/atomic.h"
18 #include "opal/runtime/opal.h"
19
20 #if OPAL_HAVE_WEAK_SYMBOLS && OMPI_PROFILING_DEFINES
21 #pragma weak MPI_T_init_thread = PMPI_T_init_thread
22 #endif
23
24 #if OMPI_PROFILING_DEFINES
25 #include "ompi/mpi/tool/profile/defines.h"
26 #endif
27
28 extern opal_mutex_t ompi_mpit_big_lock;
29
30 extern volatile uint32_t ompi_mpit_init_count;
31 extern volatile int32_t initted;
32
33
34 int MPI_T_init_thread (int required, int *provided)
35 {
36 int rc = MPI_SUCCESS;
37
38 ompi_mpit_lock ();
39
40 do {
41 if (0 != ompi_mpit_init_count++) {
42 break;
43 }
44
45
46 rc = opal_init_util (NULL, NULL);
47 if (OPAL_SUCCESS != rc) {
48 rc = MPI_ERR_OTHER;
49 break;
50 }
51
52
53 rc = ompi_info_register_framework_params (NULL);
54 if (OMPI_SUCCESS != rc) {
55 rc = MPI_ERR_OTHER;
56 break;
57 }
58
59
60
61 ompi_mpi_thread_level (required, provided);
62 } while (0);
63
64 ompi_mpit_unlock ();
65
66 return rc;
67 }