Get the trunk to build again when --without-hwloc is specified. Move a couple of key type definitions and utilities out from under the HAVE_HWLOC test so they are always available as they don't really depend on hwloc's presence. Tell two compnents not to build if hwloc is disabled:
ompi/mca/sbgp/basesmsocket orte/mca/rmaps/lama Remove stale configure.params files from the sbgp framework as the OMPI build system no longer looks at those files. This commit was SVN r27377.
Этот коммит содержится в:
родитель
42280e2af5
Коммит
54db4c35eb
@ -229,7 +229,9 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
mca_coll_sm_comm_t *data = NULL;
|
||||
size_t control_size, frag_size;
|
||||
mca_coll_sm_component_t *c = &mca_coll_sm_component;
|
||||
#if OPAL_HAVE_HWLOC
|
||||
opal_hwloc_base_memory_segment_t *maffinity;
|
||||
#endif
|
||||
int parent, min_child, max_child, num_children;
|
||||
unsigned char *base = NULL;
|
||||
const int num_barrier_buffers = 2;
|
||||
@ -240,6 +242,7 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
}
|
||||
sm_module->enabled = true;
|
||||
|
||||
#if OPAL_HAVE_HWLOC
|
||||
/* Get some space to setup memory affinity (just easier to try to
|
||||
alloc here to handle the error case) */
|
||||
maffinity = (opal_hwloc_base_memory_segment_t*)
|
||||
@ -251,6 +254,7 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
comm->c_contextid, comm->c_name);
|
||||
return OMPI_ERR_OUT_OF_RESOURCE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Allocate data to hang off the communicator. The memory we
|
||||
alloc will be laid out as follows:
|
||||
@ -272,7 +276,9 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
(sizeof(mca_coll_sm_tree_node_t) +
|
||||
(sizeof(mca_coll_sm_tree_node_t*) * c->sm_tree_degree))));
|
||||
if (NULL == data) {
|
||||
#if OPAL_HAVE_HWLOC
|
||||
free(maffinity);
|
||||
#endif
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:sm:enable (%d/%s): malloc failed (2)",
|
||||
comm->c_contextid, comm->c_name);
|
||||
@ -337,7 +343,9 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
/* Attach to this communicator's shmem data segment */
|
||||
if (OMPI_SUCCESS != (ret = bootstrap_comm(comm, sm_module))) {
|
||||
free(data);
|
||||
#if OPAL_HAVE_HWLOC
|
||||
free(maffinity);
|
||||
#endif
|
||||
sm_module->sm_comm_data = NULL;
|
||||
return ret;
|
||||
}
|
||||
@ -383,10 +391,11 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
that they're marked as unused. */
|
||||
j = 0;
|
||||
if (0 == rank) {
|
||||
#if OPAL_HAVE_HWLOC
|
||||
maffinity[j].mbs_start_addr = base;
|
||||
maffinity[j].mbs_len = c->sm_control_size *
|
||||
c->sm_comm_num_in_use_flags;
|
||||
|
||||
#endif
|
||||
/* Set the op counts to 1 (actually any nonzero value will do)
|
||||
so that the first time children/leaf processes come
|
||||
through, they don't see a value of 0 and think that the
|
||||
@ -411,6 +420,7 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
(((char*) data->mcb_data_index[i].mcbmi_control) +
|
||||
control_size);
|
||||
|
||||
#if OPAL_HAVE_HWLOC
|
||||
/* Memory affinity: control */
|
||||
|
||||
maffinity[j].mbs_len = c->sm_control_size;
|
||||
@ -426,12 +436,15 @@ int ompi_coll_sm_lazy_enable(mca_coll_base_module_t *module,
|
||||
data->mcb_data_index[i].mcbmi_data +
|
||||
(rank * c->sm_control_size);
|
||||
++j;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_HWLOC
|
||||
/* Setup memory affinity so that the pages that belong to this
|
||||
process are local to this process */
|
||||
opal_hwloc_base_memory_set(maffinity, j);
|
||||
free(maffinity);
|
||||
#endif
|
||||
|
||||
/* Zero out the control structures that belong to this process */
|
||||
memset(data->mcb_barrier_control_me, 0,
|
||||
|
@ -92,7 +92,9 @@ void* mca_mpool_sm_alloc(
|
||||
|
||||
if(mpool_sm->mem_node >= 0) {
|
||||
mseg.mbs_len = size;
|
||||
#if OPAL_HAVE_HWLOC
|
||||
opal_hwloc_base_membind(&mseg, 1, mpool_sm->mem_node);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if OPAL_CUDA_SUPPORT
|
||||
@ -122,7 +124,9 @@ void* mca_mpool_sm_realloc(
|
||||
registration);
|
||||
if(mpool_sm->mem_node >= 0) {
|
||||
mseg.mbs_len = size;
|
||||
#if OPAL_HAVE_HWLOC
|
||||
opal_hwloc_base_membind(&mseg, 1, mpool_sm->mem_node);
|
||||
#endif
|
||||
}
|
||||
|
||||
return mseg.mbs_start_addr;
|
||||
|
19
ompi/mca/sbgp/basesmsocket/configure.m4
Обычный файл
19
ompi/mca/sbgp/basesmsocket/configure.m4
Обычный файл
@ -0,0 +1,19 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2012 Los Alamos National Security, LLC.
|
||||
# All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
# MCA_sbgp_basesmsocket_CONFIG([action-if-found], [action-if-not-found])
|
||||
# -----------------------------------------------------------
|
||||
AC_DEFUN([MCA_ompi_sbgp_basesmsocket_CONFIG], [
|
||||
AC_CONFIG_FILES([ompi/mca/sbgp/basesmsocket/Makefile])
|
||||
|
||||
AS_IF([test "$OPAL_HAVE_HWLOC" = 1],
|
||||
[$1],
|
||||
[$2])
|
||||
])
|
@ -1,12 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
|
||||
# Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
PARAM_CONFIG_FILES=Makefile
|
@ -1,12 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
|
||||
# Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
PARAM_CONFIG_FILES=Makefile
|
@ -1,12 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
|
||||
# Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
PARAM_CONFIG_FILES=Makefile
|
@ -1,12 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
|
||||
# Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
PARAM_CONFIG_FILES=Makefile
|
@ -77,6 +77,16 @@ OPAL_DECLSPEC extern opal_list_t opal_hwloc_base_components;
|
||||
OPAL_DECLSPEC extern bool opal_hwloc_base_inited;
|
||||
OPAL_DECLSPEC extern bool opal_hwloc_topology_inited;
|
||||
|
||||
/* we always must have some minimal locality support */
|
||||
#define OPAL_HWLOC_PRINT_MAX_SIZE 50
|
||||
#define OPAL_HWLOC_PRINT_NUM_BUFS 16
|
||||
typedef struct {
|
||||
char *buffers[OPAL_HWLOC_PRINT_NUM_BUFS];
|
||||
int cntr;
|
||||
} opal_hwloc_print_buffers_t;
|
||||
opal_hwloc_print_buffers_t *opal_hwloc_get_print_buffer(void);
|
||||
OPAL_DECLSPEC char* opal_hwloc_base_print_locality(opal_hwloc_locality_t locality);
|
||||
|
||||
#if OPAL_HAVE_HWLOC
|
||||
OPAL_DECLSPEC extern char *opal_hwloc_base_slot_list;
|
||||
OPAL_DECLSPEC extern char *opal_hwloc_base_cpu_set;
|
||||
@ -172,7 +182,6 @@ OPAL_DECLSPEC int opal_hwloc_base_get_local_index(hwloc_obj_type_t type,
|
||||
OPAL_DECLSPEC unsigned int opal_hwloc_base_get_npus(hwloc_topology_t topo,
|
||||
hwloc_obj_t target);
|
||||
OPAL_DECLSPEC char* opal_hwloc_base_print_binding(opal_binding_policy_t binding);
|
||||
OPAL_DECLSPEC char* opal_hwloc_base_print_locality(opal_hwloc_locality_t locality);
|
||||
OPAL_DECLSPEC char* opal_hwloc_base_print_level(opal_hwloc_level_t level);
|
||||
|
||||
/**
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "opal/mca/mca.h"
|
||||
#include "opal/mca/base/base.h"
|
||||
#include "opal/mca/base/mca_base_param.h"
|
||||
#include "opal/threads/tsd.h"
|
||||
|
||||
#include "opal/mca/hwloc/hwloc.h"
|
||||
#include "opal/mca/hwloc/base/base.h"
|
||||
@ -304,6 +305,137 @@ int opal_hwloc_base_open(void)
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
static bool fns_init=false;
|
||||
static opal_tsd_key_t print_tsd_key;
|
||||
static char* opal_hwloc_print_null = "NULL";
|
||||
|
||||
static void buffer_cleanup(void *value)
|
||||
{
|
||||
int i;
|
||||
opal_hwloc_print_buffers_t *ptr;
|
||||
|
||||
if (NULL != value) {
|
||||
ptr = (opal_hwloc_print_buffers_t*)value;
|
||||
for (i=0; i < OPAL_HWLOC_PRINT_NUM_BUFS; i++) {
|
||||
free(ptr->buffers[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
opal_hwloc_print_buffers_t *opal_hwloc_get_print_buffer(void)
|
||||
{
|
||||
opal_hwloc_print_buffers_t *ptr;
|
||||
int ret, i;
|
||||
|
||||
if (!fns_init) {
|
||||
/* setup the print_args function */
|
||||
if (OPAL_SUCCESS != (ret = opal_tsd_key_create(&print_tsd_key, buffer_cleanup))) {
|
||||
return NULL;
|
||||
}
|
||||
fns_init = true;
|
||||
}
|
||||
|
||||
ret = opal_tsd_getspecific(print_tsd_key, (void**)&ptr);
|
||||
if (OPAL_SUCCESS != ret) return NULL;
|
||||
|
||||
if (NULL == ptr) {
|
||||
ptr = (opal_hwloc_print_buffers_t*)malloc(sizeof(opal_hwloc_print_buffers_t));
|
||||
for (i=0; i < OPAL_HWLOC_PRINT_NUM_BUFS; i++) {
|
||||
ptr->buffers[i] = (char *) malloc((OPAL_HWLOC_PRINT_MAX_SIZE+1) * sizeof(char));
|
||||
}
|
||||
ptr->cntr = 0;
|
||||
ret = opal_tsd_setspecific(print_tsd_key, (void*)ptr);
|
||||
}
|
||||
|
||||
return (opal_hwloc_print_buffers_t*) ptr;
|
||||
}
|
||||
|
||||
char* opal_hwloc_base_print_locality(opal_hwloc_locality_t locality)
|
||||
{
|
||||
opal_hwloc_print_buffers_t *ptr;
|
||||
int idx;
|
||||
|
||||
ptr = opal_hwloc_get_print_buffer();
|
||||
if (NULL == ptr) {
|
||||
return opal_hwloc_print_null;
|
||||
}
|
||||
/* cycle around the ring */
|
||||
if (OPAL_HWLOC_PRINT_NUM_BUFS == ptr->cntr) {
|
||||
ptr->cntr = 0;
|
||||
}
|
||||
|
||||
idx = 0;
|
||||
|
||||
if (OPAL_PROC_ON_LOCAL_CLUSTER(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'C';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_CU(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'C';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'U';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_NODE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_BOARD(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'B';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_NUMA(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'u';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_SOCKET(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'S';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_L3CACHE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = '3';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_L2CACHE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = '2';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_L1CACHE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = '1';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_CORE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'C';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_HWTHREAD(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'H';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'w';
|
||||
ptr->buffers[ptr->cntr][idx++] = 't';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (0 < idx) {
|
||||
ptr->buffers[ptr->cntr][idx-1] = '\0';
|
||||
} else if (OPAL_PROC_NON_LOCAL & locality) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'O';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = '\0';
|
||||
} else {
|
||||
/* must be an unknown locality */
|
||||
ptr->buffers[ptr->cntr][idx++] = 'U';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'K';
|
||||
ptr->buffers[ptr->cntr][idx++] = '\0';
|
||||
}
|
||||
|
||||
return ptr->buffers[ptr->cntr];
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_HWLOC
|
||||
static void obj_data_const(opal_hwloc_obj_data_t *ptr)
|
||||
{
|
||||
|
@ -1518,58 +1518,6 @@ int opal_hwloc_base_get_local_index(hwloc_obj_type_t type,
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
#define OPAL_HWLOC_PRINT_MAX_SIZE 50
|
||||
#define OPAL_HWLOC_PRINT_NUM_BUFS 16
|
||||
|
||||
static bool fns_init=false;
|
||||
static opal_tsd_key_t print_tsd_key;
|
||||
static char* opal_hwloc_print_null = "NULL";
|
||||
typedef struct {
|
||||
char *buffers[OPAL_HWLOC_PRINT_NUM_BUFS];
|
||||
int cntr;
|
||||
} opal_hwloc_print_buffers_t;
|
||||
|
||||
static void buffer_cleanup(void *value)
|
||||
{
|
||||
int i;
|
||||
opal_hwloc_print_buffers_t *ptr;
|
||||
|
||||
if (NULL != value) {
|
||||
ptr = (opal_hwloc_print_buffers_t*)value;
|
||||
for (i=0; i < OPAL_HWLOC_PRINT_NUM_BUFS; i++) {
|
||||
free(ptr->buffers[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static opal_hwloc_print_buffers_t *get_print_buffer(void)
|
||||
{
|
||||
opal_hwloc_print_buffers_t *ptr;
|
||||
int ret, i;
|
||||
|
||||
if (!fns_init) {
|
||||
/* setup the print_args function */
|
||||
if (OPAL_SUCCESS != (ret = opal_tsd_key_create(&print_tsd_key, buffer_cleanup))) {
|
||||
return NULL;
|
||||
}
|
||||
fns_init = true;
|
||||
}
|
||||
|
||||
ret = opal_tsd_getspecific(print_tsd_key, (void**)&ptr);
|
||||
if (OPAL_SUCCESS != ret) return NULL;
|
||||
|
||||
if (NULL == ptr) {
|
||||
ptr = (opal_hwloc_print_buffers_t*)malloc(sizeof(opal_hwloc_print_buffers_t));
|
||||
for (i=0; i < OPAL_HWLOC_PRINT_NUM_BUFS; i++) {
|
||||
ptr->buffers[i] = (char *) malloc((OPAL_HWLOC_PRINT_MAX_SIZE+1) * sizeof(char));
|
||||
}
|
||||
ptr->cntr = 0;
|
||||
ret = opal_tsd_setspecific(print_tsd_key, (void*)ptr);
|
||||
}
|
||||
|
||||
return (opal_hwloc_print_buffers_t*) ptr;
|
||||
}
|
||||
|
||||
char* opal_hwloc_base_print_binding(opal_binding_policy_t binding)
|
||||
{
|
||||
char *ret, *bind;
|
||||
@ -1609,7 +1557,7 @@ char* opal_hwloc_base_print_binding(opal_binding_policy_t binding)
|
||||
default:
|
||||
bind = "UNKNOWN";
|
||||
}
|
||||
ptr = get_print_buffer();
|
||||
ptr = opal_hwloc_get_print_buffer();
|
||||
if (NULL == ptr) {
|
||||
return opal_hwloc_print_null;
|
||||
}
|
||||
@ -1669,93 +1617,6 @@ char* opal_hwloc_base_print_level(opal_hwloc_level_t level)
|
||||
return ret;
|
||||
}
|
||||
|
||||
char* opal_hwloc_base_print_locality(opal_hwloc_locality_t locality)
|
||||
{
|
||||
opal_hwloc_print_buffers_t *ptr;
|
||||
int idx;
|
||||
|
||||
ptr = get_print_buffer();
|
||||
if (NULL == ptr) {
|
||||
return opal_hwloc_print_null;
|
||||
}
|
||||
/* cycle around the ring */
|
||||
if (OPAL_HWLOC_PRINT_NUM_BUFS == ptr->cntr) {
|
||||
ptr->cntr = 0;
|
||||
}
|
||||
|
||||
idx = 0;
|
||||
|
||||
if (OPAL_PROC_ON_LOCAL_CLUSTER(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'C';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_CU(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'C';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'U';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_NODE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_BOARD(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'B';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_NUMA(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'u';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_SOCKET(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'S';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_L3CACHE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = '3';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_L2CACHE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = '2';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_L1CACHE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'L';
|
||||
ptr->buffers[ptr->cntr][idx++] = '1';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_CORE(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'C';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (OPAL_PROC_ON_LOCAL_HWTHREAD(locality)) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'H';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'w';
|
||||
ptr->buffers[ptr->cntr][idx++] = 't';
|
||||
ptr->buffers[ptr->cntr][idx++] = ':';
|
||||
}
|
||||
if (0 < idx) {
|
||||
ptr->buffers[ptr->cntr][idx-1] = '\0';
|
||||
} else if (OPAL_PROC_NON_LOCAL & locality) {
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'O';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = '\0';
|
||||
} else {
|
||||
/* must be an unknown locality */
|
||||
ptr->buffers[ptr->cntr][idx++] = 'U';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'N';
|
||||
ptr->buffers[ptr->cntr][idx++] = 'K';
|
||||
ptr->buffers[ptr->cntr][idx++] = '\0';
|
||||
}
|
||||
|
||||
return ptr->buffers[ptr->cntr];
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Turn an int bitmap to a "a-b,c" range kind of string
|
||||
|
@ -81,9 +81,48 @@ typedef enum {
|
||||
} opal_hwloc_level_t;
|
||||
#define OPAL_HWLOC_LEVEL_T OPAL_INT
|
||||
|
||||
/* include implementation to call */
|
||||
#if OPAL_HAVE_HWLOC
|
||||
#include MCA_hwloc_IMPLEMENTATION_HEADER
|
||||
/* ******************************************************************** */
|
||||
/* Although we cannot bind if --without-hwloc is set,
|
||||
* we do still need to know some basic locality data
|
||||
* like on_node and not_on_node. So ensure that we
|
||||
* always have access to that much info by including
|
||||
* the definitions here, outside the if-have-hwloc test
|
||||
*/
|
||||
typedef uint16_t opal_hwloc_locality_t;
|
||||
#define OPAL_HWLOC_LOCALITY_T OPAL_UINT16
|
||||
|
||||
/** Process locality definitions */
|
||||
enum {
|
||||
OPAL_PROC_LOCALITY_UNKNOWN = 0x0000,
|
||||
OPAL_PROC_NON_LOCAL = 0x8000,
|
||||
OPAL_PROC_ON_CLUSTER = 0x0400,
|
||||
OPAL_PROC_ON_CU = 0x0200,
|
||||
OPAL_PROC_ON_NODE = 0x0100,
|
||||
OPAL_PROC_ON_BOARD = 0x0080,
|
||||
OPAL_PROC_ON_NUMA = 0x0040,
|
||||
OPAL_PROC_ON_SOCKET = 0x0020,
|
||||
OPAL_PROC_ON_L3CACHE = 0x0010,
|
||||
OPAL_PROC_ON_L2CACHE = 0x0008,
|
||||
OPAL_PROC_ON_L1CACHE = 0x0004,
|
||||
OPAL_PROC_ON_CORE = 0x0002,
|
||||
OPAL_PROC_ON_HWTHREAD = 0x0001,
|
||||
OPAL_PROC_ALL_LOCAL = 0x0fff
|
||||
};
|
||||
|
||||
/** Process locality macros */
|
||||
#define OPAL_PROC_ON_LOCAL_HWTHREAD(n) ((n) & OPAL_PROC_ON_HWTHREAD)
|
||||
#define OPAL_PROC_ON_LOCAL_CORE(n) ((n) & OPAL_PROC_ON_CORE)
|
||||
#define OPAL_PROC_ON_LOCAL_L1CACHE(n) ((n) & OPAL_PROC_ON_L1CACHE)
|
||||
#define OPAL_PROC_ON_LOCAL_L2CACHE(n) ((n) & OPAL_PROC_ON_L2CACHE)
|
||||
#define OPAL_PROC_ON_LOCAL_L3CACHE(n) ((n) & OPAL_PROC_ON_L3CACHE)
|
||||
#define OPAL_PROC_ON_LOCAL_SOCKET(n) ((n) & OPAL_PROC_ON_SOCKET)
|
||||
#define OPAL_PROC_ON_LOCAL_NUMA(n) ((n) & OPAL_PROC_ON_NUMA)
|
||||
#define OPAL_PROC_ON_LOCAL_BOARD(n) ((n) & OPAL_PROC_ON_BOARD)
|
||||
#define OPAL_PROC_ON_LOCAL_NODE(n) ((n) & OPAL_PROC_ON_NODE)
|
||||
#define OPAL_PROC_ON_LOCAL_CU(n) ((n) & OPAL_PROC_ON_CU)
|
||||
#define OPAL_PROC_ON_LOCAL_CLUSTER(n) ((n) & OPAL_PROC_ON_CLUSTER)
|
||||
|
||||
/* ******************************************************************** */
|
||||
|
||||
/**
|
||||
* Struct used to describe a section of memory (starting address
|
||||
@ -104,6 +143,10 @@ typedef struct {
|
||||
size_t mbs_len;
|
||||
} opal_hwloc_base_memory_segment_t;
|
||||
|
||||
/* include implementation to call */
|
||||
#if OPAL_HAVE_HWLOC
|
||||
#include MCA_hwloc_IMPLEMENTATION_HEADER
|
||||
|
||||
/* define type of processor info requested */
|
||||
typedef uint8_t opal_hwloc_resource_type_t;
|
||||
#define OPAL_HWLOC_PHYSICAL 1
|
||||
@ -172,43 +215,6 @@ typedef uint16_t opal_binding_policy_t;
|
||||
#define OPAL_BIND_OVERLOAD_ALLOWED(n) \
|
||||
(OPAL_BIND_ALLOW_OVERLOAD & (n))
|
||||
|
||||
/* ******************************************************************** */
|
||||
typedef uint16_t opal_hwloc_locality_t;
|
||||
#define OPAL_HWLOC_LOCALITY_T OPAL_UINT16
|
||||
|
||||
/** Process locality definitions */
|
||||
enum {
|
||||
OPAL_PROC_LOCALITY_UNKNOWN = 0x0000,
|
||||
OPAL_PROC_NON_LOCAL = 0x8000,
|
||||
OPAL_PROC_ON_CLUSTER = 0x0400,
|
||||
OPAL_PROC_ON_CU = 0x0200,
|
||||
OPAL_PROC_ON_NODE = 0x0100,
|
||||
OPAL_PROC_ON_BOARD = 0x0080,
|
||||
OPAL_PROC_ON_NUMA = 0x0040,
|
||||
OPAL_PROC_ON_SOCKET = 0x0020,
|
||||
OPAL_PROC_ON_L3CACHE = 0x0010,
|
||||
OPAL_PROC_ON_L2CACHE = 0x0008,
|
||||
OPAL_PROC_ON_L1CACHE = 0x0004,
|
||||
OPAL_PROC_ON_CORE = 0x0002,
|
||||
OPAL_PROC_ON_HWTHREAD = 0x0001,
|
||||
OPAL_PROC_ALL_LOCAL = 0x0fff
|
||||
};
|
||||
|
||||
/** Process locality macros */
|
||||
#define OPAL_PROC_ON_LOCAL_HWTHREAD(n) ((n) & OPAL_PROC_ON_HWTHREAD)
|
||||
#define OPAL_PROC_ON_LOCAL_CORE(n) ((n) & OPAL_PROC_ON_CORE)
|
||||
#define OPAL_PROC_ON_LOCAL_L1CACHE(n) ((n) & OPAL_PROC_ON_L1CACHE)
|
||||
#define OPAL_PROC_ON_LOCAL_L2CACHE(n) ((n) & OPAL_PROC_ON_L2CACHE)
|
||||
#define OPAL_PROC_ON_LOCAL_L3CACHE(n) ((n) & OPAL_PROC_ON_L3CACHE)
|
||||
#define OPAL_PROC_ON_LOCAL_SOCKET(n) ((n) & OPAL_PROC_ON_SOCKET)
|
||||
#define OPAL_PROC_ON_LOCAL_NUMA(n) ((n) & OPAL_PROC_ON_NUMA)
|
||||
#define OPAL_PROC_ON_LOCAL_BOARD(n) ((n) & OPAL_PROC_ON_BOARD)
|
||||
#define OPAL_PROC_ON_LOCAL_NODE(n) ((n) & OPAL_PROC_ON_NODE)
|
||||
#define OPAL_PROC_ON_LOCAL_CU(n) ((n) & OPAL_PROC_ON_CU)
|
||||
#define OPAL_PROC_ON_LOCAL_CLUSTER(n) ((n) & OPAL_PROC_ON_CLUSTER)
|
||||
|
||||
/* ******************************************************************** */
|
||||
|
||||
/* some global values */
|
||||
OPAL_DECLSPEC extern hwloc_topology_t opal_hwloc_topology;
|
||||
OPAL_DECLSPEC extern opal_binding_policy_t opal_hwloc_binding_policy;
|
||||
|
19
orte/mca/rmaps/lama/configure.m4
Обычный файл
19
orte/mca/rmaps/lama/configure.m4
Обычный файл
@ -0,0 +1,19 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2012 Los Alamos National Security, LLC.
|
||||
# All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
# MCA_rmaps_lama_CONFIG([action-if-found], [action-if-not-found])
|
||||
# -----------------------------------------------------------
|
||||
AC_DEFUN([MCA_orte_rmaps_lama_CONFIG], [
|
||||
AC_CONFIG_FILES([orte/mca/rmaps/lama/Makefile])
|
||||
|
||||
AS_IF([test "$OPAL_HAVE_HWLOC" = 1],
|
||||
[$1],
|
||||
[$2])
|
||||
])
|
@ -656,9 +656,9 @@ int orte_util_decode_pidmap(opal_byte_object_t *bo)
|
||||
#if OPAL_HAVE_HWLOC
|
||||
opal_hwloc_level_t bind_level = OPAL_HWLOC_NODE_LEVEL, pbind, *lvptr;
|
||||
unsigned int bind_idx, pbidx, *uiptr;
|
||||
opal_hwloc_locality_t locality;
|
||||
char *cpu_bitmap;
|
||||
#endif
|
||||
opal_hwloc_locality_t locality;
|
||||
orte_std_cntr_t n;
|
||||
opal_buffer_t buf;
|
||||
int rc;
|
||||
@ -722,12 +722,13 @@ int orte_util_decode_pidmap(opal_byte_object_t *bo)
|
||||
if (proc.jobid == ORTE_PROC_MY_NAME->jobid) {
|
||||
orte_process_info.bind_level = bind_level;
|
||||
}
|
||||
#endif
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((2, orte_nidmap_output,
|
||||
"%s orte:util:decode:pidmap nprocs %s bind level %s",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||
ORTE_VPID_PRINT(num_procs),
|
||||
opal_hwloc_base_print_level(bind_level)));
|
||||
#endif
|
||||
|
||||
/* cycle thru the data until we hit an INVALID vpid indicating
|
||||
* all data for this job has been read
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user