diff --git a/ompi/mca/coll/fca/coll_fca.h b/ompi/mca/coll/fca/coll_fca.h index ba8107b769..d3bfb4a70e 100644 --- a/ompi/mca/coll/fca/coll_fca.h +++ b/ompi/mca/coll/fca/coll_fca.h @@ -174,6 +174,12 @@ struct mca_coll_fca_component_t { /** MCA parameter: Enable parallel hash calc */ int fca_parallel_hash_calc; + /* r/o MCA parameter: compiletime libfca version */ + char* compiletime_version; + + /* r/o MCA parameter: runtime libfca version */ + char* runtime_version; + /** Some statistics counters */ double fca_total_work_time; double fca_work_time_parallel; diff --git a/ompi/mca/coll/fca/coll_fca_component.c b/ompi/mca/coll/fca/coll_fca_component.c index a0709a034d..1a78286b6f 100644 --- a/ompi/mca/coll/fca/coll_fca_component.c +++ b/ompi/mca/coll/fca/coll_fca_component.c @@ -1407,6 +1407,24 @@ static int fca_register(void) OPAL_INFO_LVL_9, MCA_BASE_VAR_SCOPE_READONLY, &mca_coll_fca_component.fca_number_of_primes); + mca_coll_fca_component.compiletime_version = FCA_VERNO_STRING; + (void) mca_base_component_var_register(c, + MCA_COMPILETIME_VER, + "Version of the libfca library ompi compiled with", + MCA_BASE_VAR_TYPE_STRING, + NULL, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &mca_coll_fca_component.compiletime_version); + mca_coll_fca_component.runtime_version = fca_get_version_string(); + (void) mca_base_component_var_register(c, + MCA_RUNTIME_VER, + "Version of the libfca library ompi run with", + MCA_BASE_VAR_TYPE_STRING, + NULL, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &mca_coll_fca_component.runtime_version); mca_coll_fca_component.fca_total_work_time = 0; mca_coll_fca_component.fca_work_time_parallel = 0; diff --git a/ompi/mca/coll/hcoll/coll_hcoll.h b/ompi/mca/coll/hcoll/coll_hcoll.h index 8894e690ee..17bd84d178 100644 --- a/ompi/mca/coll/hcoll/coll_hcoll.h +++ b/ompi/mca/coll/hcoll/coll_hcoll.h @@ -67,6 +67,12 @@ struct mca_coll_hcoll_component_t { /** MCA parameter: ON/OFF user defined datatype through HCOLL */ int hcoll_datatype_fallback; + /** r/o MCA parameter: libhcoll runtime version */ + char* runtime_version; + + /** r/o MCA parameter: libhcoll compiletime version */ + char* compiletime_version; + /* FCA global stuff */ mca_coll_hcoll_ops_t hcoll_ops; ompi_free_list_t requests; diff --git a/ompi/mca/coll/hcoll/coll_hcoll_component.c b/ompi/mca/coll/hcoll/coll_hcoll_component.c index 2c31854a44..426169559d 100644 --- a/ompi/mca/coll/hcoll/coll_hcoll_component.c +++ b/ompi/mca/coll/hcoll/coll_hcoll_component.c @@ -58,7 +58,8 @@ mca_coll_hcoll_component_t mca_coll_hcoll_component = { }, 90, /* priority */ 0, /* verbose level */ - 1 /* hcoll_enable */ + 1, /* hcoll_enable */ + NULL /*hcoll version */ }; @@ -206,6 +207,24 @@ static int hcoll_register(void) &mca_coll_hcoll_component.hcoll_datatype_fallback, 0)); + mca_coll_hcoll_component.compiletime_version = HCOLL_VERNO_STRING; + mca_base_component_var_register(&mca_coll_hcoll_component.super.collm_version, + MCA_COMPILETIME_VER, + "Version of the libhcoll library ompi compiled with", + MCA_BASE_VAR_TYPE_STRING, + NULL, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &mca_coll_hcoll_component.compiletime_version); + mca_coll_hcoll_component.runtime_version = hcoll_get_version(); + mca_base_component_var_register(&mca_coll_hcoll_component.super.collm_version, + MCA_RUNTIME_VER, + "Version of the libhcoll library ompi run with", + MCA_BASE_VAR_TYPE_STRING, + NULL, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &mca_coll_hcoll_component.runtime_version); return ret; } diff --git a/ompi/mca/mtl/mxm/mtl_mxm_component.c b/ompi/mca/mtl/mxm/mtl_mxm_component.c index dde0db7e85..def0068be7 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm_component.c +++ b/ompi/mca/mtl/mxm/mtl_mxm_component.c @@ -63,6 +63,12 @@ static int ompi_mtl_mxm_component_register(void) { mca_base_component_t*c; +#if MXM_API < MXM_VERSION(3,0) + unsigned long cur_ver; + long major, minor; + char* runtime_version; +#endif + c = &mca_mtl_mxm_component.super.mtl_version; ompi_mtl_mxm.verbose = 0; @@ -86,6 +92,39 @@ static int ompi_mtl_mxm_component_register(void) MCA_BASE_VAR_SCOPE_READONLY, &ompi_mtl_mxm.mxm_np); + ompi_mtl_mxm.compiletime_version = MXM_VERNO_STRING; + (void) mca_base_component_var_register(c, + MCA_COMPILETIME_VER, + "Version of the libmxm library ompi compiled with", + MCA_BASE_VAR_TYPE_STRING, + NULL, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &ompi_mtl_mxm.compiletime_version); + +#if MXM_API >= MXM_VERSION(3,0) + ompi_mtl_mxm.runtime_version = mxm_get_version_string(); +#else + cur_ver = mxm_get_version(); + major = (cur_ver >> MXM_MAJOR_BIT) & 0xff; + minor = (cur_ver >> MXM_MINOR_BIT) & 0xff; + asprintf(&runtime_version, "%ld.%ld", major, minor); + ompi_mtl_mxm.runtime_version = runtime_version; +#endif + + (void) mca_base_component_var_register(c, + MCA_RUNTIME_VER, + "Version of the libmxm library ompi run with", + MCA_BASE_VAR_TYPE_STRING, + NULL, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &ompi_mtl_mxm.runtime_version); + +#if MXM_API < MXM_VERSION(3,0) + free(runtime_version); +#endif + return OMPI_SUCCESS; } diff --git a/ompi/mca/mtl/mxm/mtl_mxm_types.h b/ompi/mca/mtl/mxm/mtl_mxm_types.h index d2803f6f4f..2a6410d7a5 100644 --- a/ompi/mca/mtl/mxm/mtl_mxm_types.h +++ b/ompi/mca/mtl/mxm/mtl_mxm_types.h @@ -35,6 +35,8 @@ typedef struct mca_mtl_mxm_module_t { #if MXM_API >= MXM_VERSION(2,0) int using_mem_hooks; #endif + char* runtime_version; + char* compiletime_version; } mca_mtl_mxm_module_t; diff --git a/opal/mca/base/mca_base_var.h b/opal/mca/base/mca_base_var.h index a08b14287a..ba0bdc5ba5 100644 --- a/opal/mca/base/mca_base_var.h +++ b/opal/mca/base/mca_base_var.h @@ -716,6 +716,9 @@ typedef enum { */ OPAL_DECLSPEC int mca_base_var_dump(int vari, char ***out, mca_base_var_dump_type_t output_type); +#define MCA_COMPILETIME_VER "print_compiletime_version" +#define MCA_RUNTIME_VER "print_runtime_version" + END_C_DECLS #endif /* OPAL_MCA_BASE_VAR_H */