1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
2 /*
3 * Copyright (c) 2017 Mellanox Technologies, Inc.
4 * All rights reserved.
5 * $COPYRIGHT$
6 *
7 * Additional copyrights may follow
8 *
9 * $HEADER$
10 */
11
12 #include "oshmem_config.h"
13
14 #include "opal/constants.h"
15
16 #include "oshmem/mca/sshmem/sshmem.h"
17 #include "oshmem/mca/sshmem/base/base.h"
18 #include "oshmem/mca/spml/base/base.h"
19
20 #include "sshmem_ucx.h"
21
22 /**
23 * public string showing the shmem ompi_ucx component version number
24 */
25 const char *mca_sshmem_ucx_component_version_string =
26 "OSHMEM ucx sshmem MCA component version " OSHMEM_VERSION;
27
28
29 /**
30 * local functions
31 */
32 static int ucx_register(void);
33 static int ucx_open(void);
34 static int ucx_close(void);
35 static int ucx_query(mca_base_module_t **module, int *priority);
36 static int ucx_runtime_query(mca_base_module_t **module,
37 int *priority,
38 const char *hint);
39
40 /**
41 * instantiate the public struct with all of our public information
42 * and pointers to our public functions in it
43 */
44 mca_sshmem_ucx_component_t mca_sshmem_ucx_component = {
45 /* ////////////////////////////////////////////////////////////////////// */
46 /* super */
47 /* ////////////////////////////////////////////////////////////////////// */
48 {
49 /**
50 * common MCA component data
51 */
52 .base_version = {
53 MCA_SSHMEM_BASE_VERSION_2_0_0,
54
55 /* component name and version */
56 .mca_component_name = "ucx",
57 MCA_BASE_MAKE_VERSION(component, OSHMEM_MAJOR_VERSION, OSHMEM_MINOR_VERSION,
58 OSHMEM_RELEASE_VERSION),
59
60 .mca_open_component = ucx_open,
61 .mca_close_component = ucx_close,
62 .mca_query_component = ucx_query,
63 .mca_register_component_params = ucx_register,
64 },
65 /* MCA v2.0.0 component meta data */
66 .base_data = {
67 /* the component is checkpoint ready */
68 MCA_BASE_METADATA_PARAM_CHECKPOINT
69 },
70 .runtime_query = ucx_runtime_query,
71 },
72 };
73
74 static int
ucx_runtime_query(mca_base_module_t ** module,int * priority,const char * hint)75 ucx_runtime_query(mca_base_module_t **module,
76 int *priority,
77 const char *hint)
78 {
79 /* check that spml ucx was selected. Otherwise disqualify */
80 if (strcmp(mca_spml_base_selected_component.spmlm_version.mca_component_name, "ucx")) {
81 *module = NULL;
82 return OSHMEM_ERR_NOT_AVAILABLE;
83 }
84
85 *priority = mca_sshmem_ucx_component.priority;
86 *module = (mca_base_module_t *)&mca_sshmem_ucx_module.super;
87 return OPAL_SUCCESS;
88 }
89
90 static int
ucx_register(void)91 ucx_register(void)
92 {
93 /* (default) priority - set high to make ucx the default */
94 mca_sshmem_ucx_component.priority = 100;
95 mca_base_component_var_register (&mca_sshmem_ucx_component.super.base_version,
96 "priority", "Priority for sshmem ucx "
97 "component (default: 100)", MCA_BASE_VAR_TYPE_INT,
98 NULL, 0, MCA_BASE_VAR_FLAG_SETTABLE,
99 OPAL_INFO_LVL_3,
100 MCA_BASE_VAR_SCOPE_ALL_EQ,
101 &mca_sshmem_ucx_component.priority);
102
103 return OSHMEM_SUCCESS;
104 }
105
106 static int
ucx_open(void)107 ucx_open(void)
108 {
109 return OSHMEM_SUCCESS;
110 }
111
112 static int
ucx_query(mca_base_module_t ** module,int * priority)113 ucx_query(mca_base_module_t **module, int *priority)
114 {
115 *priority = mca_sshmem_ucx_component.priority;
116 *module = (mca_base_module_t *)&mca_sshmem_ucx_module.super;
117 return OSHMEM_SUCCESS;
118 }
119
120 static int
ucx_close(void)121 ucx_close(void)
122 {
123 return OSHMEM_SUCCESS;
124 }
125
126