mca/base: add support for additional variable types
This commit adds long, int32_t, uint32_t, int64_t, and uint64_t as possible MCA variable types. Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Этот коммит содержится в:
родитель
6f589546d3
Коммит
5ed2fc2d48
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012-2018 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2016 Intel, Inc. All rights reserved.
|
* Copyright (c) 2016 Intel, Inc. All rights reserved.
|
||||||
@ -51,6 +51,15 @@ int MPI_T_cvar_read (MPI_T_cvar_handle handle, void *buf)
|
|||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
||||||
((int *) buf)[0] = value->intval;
|
((int *) buf)[0] = value->intval;
|
||||||
break;
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_INT32_T:
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT32_T:
|
||||||
|
((int32_t *) buf)[0] = value->int32tval;
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_INT64_T:
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT64_T:
|
||||||
|
((int64_t *) buf)[0] = value->int64tval;
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_LONG:
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG:
|
||||||
((unsigned long *) buf)[0] = value->ulval;
|
((unsigned long *) buf)[0] = value->ulval;
|
||||||
break;
|
break;
|
||||||
@ -61,7 +70,7 @@ int MPI_T_cvar_read (MPI_T_cvar_handle handle, void *buf)
|
|||||||
((size_t *) buf)[0] = value->sizetval;
|
((size_t *) buf)[0] = value->sizetval;
|
||||||
break;
|
break;
|
||||||
case MCA_BASE_VAR_TYPE_BOOL:
|
case MCA_BASE_VAR_TYPE_BOOL:
|
||||||
((int *) buf)[0] = value->boolval;
|
((bool *) buf)[0] = value->boolval;
|
||||||
break;
|
break;
|
||||||
case MCA_BASE_VAR_TYPE_DOUBLE:
|
case MCA_BASE_VAR_TYPE_DOUBLE:
|
||||||
((double *) buf)[0] = value->lfval;
|
((double *) buf)[0] = value->lfval;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012-2018 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2015 Research Organization for Information Science
|
* Copyright (c) 2015 Research Organization for Information Science
|
||||||
* and Technology (RIST). All rights reserved.
|
* and Technology (RIST). All rights reserved.
|
||||||
@ -28,53 +28,41 @@ void ompi_mpit_unlock (void)
|
|||||||
opal_mutex_unlock (&ompi_mpit_big_lock);
|
opal_mutex_unlock (&ompi_mpit_big_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MPI_Datatype mca_to_mpi_datatypes[MCA_BASE_VAR_TYPE_MAX] = {
|
||||||
|
[MCA_BASE_VAR_TYPE_INT] = MPI_INT,
|
||||||
|
[MCA_BASE_VAR_TYPE_UNSIGNED_INT] = MPI_UNSIGNED,
|
||||||
|
[MCA_BASE_VAR_TYPE_UNSIGNED_LONG] = MPI_UNSIGNED_LONG,
|
||||||
|
[MCA_BASE_VAR_TYPE_UNSIGNED_LONG_LONG] = MPI_UNSIGNED_LONG_LONG,
|
||||||
|
|
||||||
|
#if SIZEOF_SIZE_T == SIZEOF_UNSIGNED_INT
|
||||||
|
[MCA_BASE_VAR_TYPE_SIZE_T] = MPI_UNSIGNED,
|
||||||
|
#elif SIZEOF_SIZE_T == SIZEOF_UNSIGNED_LONG
|
||||||
|
[MCA_BASE_VAR_TYPE_SIZE_T] = MPI_UNSIGNED_LONG,
|
||||||
|
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
||||||
|
[MCA_BASE_VAR_TYPE_SIZE_T] = MPI_UNSIGNED_LONG_LONG,
|
||||||
|
#else
|
||||||
|
[MCA_BASE_VAR_TYPE_SIZE_T] = NULL,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[MCA_BASE_VAR_TYPE_STRING] = MPI_CHAR,
|
||||||
|
[MCA_BASE_VAR_TYPE_VERSION_STRING] = MPI_CHAR,
|
||||||
|
[MCA_BASE_VAR_TYPE_BOOL] = MPI_C_BOOL,
|
||||||
|
[MCA_BASE_VAR_TYPE_DOUBLE] = MPI_DOUBLE,
|
||||||
|
[MCA_BASE_VAR_TYPE_LONG] = MPI_LONG,
|
||||||
|
[MCA_BASE_VAR_TYPE_INT32_T] = MPI_INT32_T,
|
||||||
|
[MCA_BASE_VAR_TYPE_UINT32_T] = MPI_UINT32_T,
|
||||||
|
[MCA_BASE_VAR_TYPE_INT64_T] = MPI_INT64_T,
|
||||||
|
[MCA_BASE_VAR_TYPE_UINT64_T] = MPI_UINT64_T,
|
||||||
|
};
|
||||||
|
|
||||||
int ompit_var_type_to_datatype (mca_base_var_type_t type, MPI_Datatype *datatype)
|
int ompit_var_type_to_datatype (mca_base_var_type_t type, MPI_Datatype *datatype)
|
||||||
{
|
{
|
||||||
if (!datatype) {
|
if (!datatype) {
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type) {
|
*datatype = mca_to_mpi_datatypes[type];
|
||||||
case MCA_BASE_VAR_TYPE_INT:
|
assert (*datatype);
|
||||||
*datatype = MPI_INT;
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
|
||||||
*datatype = MPI_UNSIGNED;
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG:
|
|
||||||
*datatype = MPI_UNSIGNED_LONG;
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG_LONG:
|
|
||||||
*datatype = MPI_UNSIGNED_LONG_LONG;
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_SIZE_T:
|
|
||||||
if (sizeof (size_t) == sizeof (unsigned)) {
|
|
||||||
*datatype = MPI_UNSIGNED;
|
|
||||||
} else if (sizeof (size_t) == sizeof (unsigned long)) {
|
|
||||||
*datatype = MPI_UNSIGNED_LONG;
|
|
||||||
} else if (sizeof (size_t) == sizeof (unsigned long long)) {
|
|
||||||
*datatype = MPI_UNSIGNED_LONG_LONG;
|
|
||||||
} else {
|
|
||||||
/* not supported -- fixme */
|
|
||||||
assert (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_STRING:
|
|
||||||
case MCA_BASE_VAR_TYPE_VERSION_STRING:
|
|
||||||
*datatype = MPI_CHAR;
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_BOOL:
|
|
||||||
*datatype = MPI_INT;
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_DOUBLE:
|
|
||||||
*datatype = MPI_DOUBLE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* not supported -- fixme */
|
|
||||||
assert (0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012-2018 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
|
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
|
||||||
* Copyright (c) 2015 Research Organization for Information Science
|
* Copyright (c) 2015 Research Organization for Information Science
|
||||||
@ -88,7 +88,12 @@ const char *ompi_var_type_names[] = {
|
|||||||
"string",
|
"string",
|
||||||
"version_string",
|
"version_string",
|
||||||
"bool",
|
"bool",
|
||||||
"double"
|
"double",
|
||||||
|
"long",
|
||||||
|
"int32_t",
|
||||||
|
"uint32_t",
|
||||||
|
"int64_t",
|
||||||
|
"uint64_t",
|
||||||
};
|
};
|
||||||
|
|
||||||
const size_t ompi_var_type_sizes[] = {
|
const size_t ompi_var_type_sizes[] = {
|
||||||
@ -100,7 +105,12 @@ const size_t ompi_var_type_sizes[] = {
|
|||||||
sizeof (char),
|
sizeof (char),
|
||||||
sizeof (char),
|
sizeof (char),
|
||||||
sizeof (bool),
|
sizeof (bool),
|
||||||
sizeof (double)
|
sizeof (double),
|
||||||
|
sizeof (long),
|
||||||
|
sizeof (int32_t),
|
||||||
|
sizeof (uint32_t),
|
||||||
|
sizeof (int64_t),
|
||||||
|
sizeof (uint64_t),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *var_source_names[] = {
|
static const char *var_source_names[] = {
|
||||||
@ -683,8 +693,13 @@ static int var_set_from_string (mca_base_var_t *var, char *src)
|
|||||||
|
|
||||||
switch (var->mbv_type) {
|
switch (var->mbv_type) {
|
||||||
case MCA_BASE_VAR_TYPE_INT:
|
case MCA_BASE_VAR_TYPE_INT:
|
||||||
|
case MCA_BASE_VAR_TYPE_INT32_T:
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT32_T:
|
||||||
|
case MCA_BASE_VAR_TYPE_LONG:
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG:
|
||||||
|
case MCA_BASE_VAR_TYPE_INT64_T:
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT64_T:
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG_LONG:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG_LONG:
|
||||||
case MCA_BASE_VAR_TYPE_BOOL:
|
case MCA_BASE_VAR_TYPE_BOOL:
|
||||||
case MCA_BASE_VAR_TYPE_SIZE_T:
|
case MCA_BASE_VAR_TYPE_SIZE_T:
|
||||||
@ -710,6 +725,17 @@ static int var_set_from_string (mca_base_var_t *var, char *src)
|
|||||||
MCA_BASE_VAR_TYPE_UNSIGNED_INT == var->mbv_type) {
|
MCA_BASE_VAR_TYPE_UNSIGNED_INT == var->mbv_type) {
|
||||||
int *castme = (int*) var->mbv_storage;
|
int *castme = (int*) var->mbv_storage;
|
||||||
*castme = int_value;
|
*castme = int_value;
|
||||||
|
} else if (MCA_BASE_VAR_TYPE_INT32_T == var->mbv_type ||
|
||||||
|
MCA_BASE_VAR_TYPE_UINT32_T == var->mbv_type) {
|
||||||
|
int32_t *castme = (int32_t *) var->mbv_storage;
|
||||||
|
*castme = int_value;
|
||||||
|
} else if (MCA_BASE_VAR_TYPE_INT64_T == var->mbv_type ||
|
||||||
|
MCA_BASE_VAR_TYPE_UINT64_T == var->mbv_type) {
|
||||||
|
int64_t *castme = (int64_t *) var->mbv_storage;
|
||||||
|
*castme = int_value;
|
||||||
|
} else if (MCA_BASE_VAR_TYPE_LONG == var->mbv_type) {
|
||||||
|
long *castme = (long*) var->mbv_storage;
|
||||||
|
*castme = (long) int_value;
|
||||||
} else if (MCA_BASE_VAR_TYPE_UNSIGNED_LONG == var->mbv_type) {
|
} else if (MCA_BASE_VAR_TYPE_UNSIGNED_LONG == var->mbv_type) {
|
||||||
unsigned long *castme = (unsigned long*) var->mbv_storage;
|
unsigned long *castme = (unsigned long*) var->mbv_storage;
|
||||||
*castme = (unsigned long) int_value;
|
*castme = (unsigned long) int_value;
|
||||||
@ -1263,11 +1289,18 @@ static int register_variable (const char *project_name, const char *framework_na
|
|||||||
uintptr_t align = 0;
|
uintptr_t align = 0;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case MCA_BASE_VAR_TYPE_INT:
|
case MCA_BASE_VAR_TYPE_INT:
|
||||||
align = OPAL_ALIGNMENT_INT;
|
|
||||||
break;
|
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
||||||
align = OPAL_ALIGNMENT_INT;
|
align = OPAL_ALIGNMENT_INT;
|
||||||
break;
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_INT32_T:
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT32_T:
|
||||||
|
align = OPAL_ALIGNMENT_INT32;
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_INT64_T:
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT64_T:
|
||||||
|
align = OPAL_ALIGNMENT_INT64;
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_LONG:
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_LONG:
|
||||||
align = OPAL_ALIGNMENT_LONG;
|
align = OPAL_ALIGNMENT_LONG;
|
||||||
break;
|
break;
|
||||||
@ -1914,6 +1947,21 @@ static int var_value_string (mca_base_var_t *var, char **value_string)
|
|||||||
case MCA_BASE_VAR_TYPE_INT:
|
case MCA_BASE_VAR_TYPE_INT:
|
||||||
ret = asprintf (value_string, "%d", value->intval);
|
ret = asprintf (value_string, "%d", value->intval);
|
||||||
break;
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_INT32_T:
|
||||||
|
ret = asprintf (value_string, "%" PRId32, value->int32tval);
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT32_T:
|
||||||
|
ret = asprintf (value_string, "%" PRIu32, value->uint32tval);
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_INT64_T:
|
||||||
|
ret = asprintf (value_string, "%" PRId64, value->int64tval);
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_UINT64_T:
|
||||||
|
ret = asprintf (value_string, "%" PRIu64, value->uint64tval);
|
||||||
|
break;
|
||||||
|
case MCA_BASE_VAR_TYPE_LONG:
|
||||||
|
ret = asprintf (value_string, "%ld", value->longval);
|
||||||
|
break;
|
||||||
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
case MCA_BASE_VAR_TYPE_UNSIGNED_INT:
|
||||||
ret = asprintf (value_string, "%u", value->uintval);
|
ret = asprintf (value_string, "%u", value->uintval);
|
||||||
break;
|
break;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 2008-2011 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2008-2011 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012-2018 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2016 Intel, Inc. All rights reserved.
|
* Copyright (c) 2016 Intel, Inc. All rights reserved.
|
||||||
* Copyright (c) 2017 IBM Corporation. All rights reserved.
|
* Copyright (c) 2017 IBM Corporation. All rights reserved.
|
||||||
@ -92,6 +92,17 @@ typedef enum {
|
|||||||
MCA_BASE_VAR_TYPE_BOOL,
|
MCA_BASE_VAR_TYPE_BOOL,
|
||||||
/** The variable is of type double */
|
/** The variable is of type double */
|
||||||
MCA_BASE_VAR_TYPE_DOUBLE,
|
MCA_BASE_VAR_TYPE_DOUBLE,
|
||||||
|
/** The variable is of type long int */
|
||||||
|
MCA_BASE_VAR_TYPE_LONG,
|
||||||
|
/** The variable is of type int32_t */
|
||||||
|
MCA_BASE_VAR_TYPE_INT32_T,
|
||||||
|
/** The variable is of type uint32_t */
|
||||||
|
MCA_BASE_VAR_TYPE_UINT32_T,
|
||||||
|
/** The variable is of type int64_t */
|
||||||
|
MCA_BASE_VAR_TYPE_INT64_T,
|
||||||
|
/** The variable is of type uint64_t */
|
||||||
|
MCA_BASE_VAR_TYPE_UINT64_T,
|
||||||
|
|
||||||
/** Maximum variable type. */
|
/** Maximum variable type. */
|
||||||
MCA_BASE_VAR_TYPE_MAX
|
MCA_BASE_VAR_TYPE_MAX
|
||||||
} mca_base_var_type_t;
|
} mca_base_var_type_t;
|
||||||
@ -204,14 +215,24 @@ typedef enum {
|
|||||||
typedef union {
|
typedef union {
|
||||||
/** integer value */
|
/** integer value */
|
||||||
int intval;
|
int intval;
|
||||||
|
/** int32_t value */
|
||||||
|
int32_t int32tval;
|
||||||
|
/** long value */
|
||||||
|
long longval;
|
||||||
|
/** int64_t value */
|
||||||
|
int64_t int64tval;
|
||||||
/** unsigned int value */
|
/** unsigned int value */
|
||||||
unsigned int uintval;
|
unsigned int uintval;
|
||||||
|
/** uint32_t value */
|
||||||
|
uint32_t uint32tval;
|
||||||
/** string value */
|
/** string value */
|
||||||
char *stringval;
|
char *stringval;
|
||||||
/** boolean value */
|
/** boolean value */
|
||||||
bool boolval;
|
bool boolval;
|
||||||
/** unsigned long value */
|
/** unsigned long value */
|
||||||
unsigned long ulval;
|
unsigned long ulval;
|
||||||
|
/** uint64_t value */
|
||||||
|
uint64_t uint64tval;
|
||||||
/** unsigned long long value */
|
/** unsigned long long value */
|
||||||
unsigned long long ullval;
|
unsigned long long ullval;
|
||||||
/** size_t value */
|
/** size_t value */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user