Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] [OMPI svn-full] svn:open-mpi r20003 (Solaris malloc.h issue)
From: Ethan Mallove (ethan.mallove_at_[hidden])
Date: 2008-12-10 16:29:31


Hi Patrick,

r20003 seems to break MX support on Solaris.

  $ cd ompi/mca/common/mx
  $ make
  ...
  "/usr/include/malloc.h", line 46: syntax error before or at: (
  "/usr/include/malloc.h", line 47: syntax error before or at: (
  "/usr/include/malloc.h", line 48: syntax error before or at: (
  "/usr/include/malloc.h", line 48: cannot have void object: size_t
  "/usr/include/malloc.h", line 48: identifier redeclared: size_t
  ... <4000 more lines of compiler errors> ...

The below patch makes it so opal/util/malloc.h is used instead of
/usr/include/malloc.h and the compiler errors go away. (I also needed
to include errno.h.) Would this be okay to do?

  diff -r 347f52a3713f ompi/mca/common/mx/common_mx.c
  --- ompi/mca/common/mx/common_mx.c
  +++ ompi/mca/common/mx/common_mx.c
  @@ -23,9 +23,8 @@
   #include "ompi/constants.h"
   #include "common_mx.h"
   
  -#ifdef HAVE_MALLOC_H
  -#include <malloc.h>
  -#endif
  +#include <errno.h>
  +#include "opal/util/malloc.h"
   #include "opal/memoryhooks/memory.h"
   #include "opal/mca/base/mca_base_param.h"
   #include "ompi/runtime/params.h"

I tested the above on Solaris and Linux with SunStudio.

Regards,
Ethan

On Fri, Nov/14/2008 11:17:59PM, patrick_at_[hidden] wrote:
> Author: patrick
> Date: 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> New Revision: 20003
> URL: https://svn.open-mpi.org/trac/ompi/changeset/20003
>
> Log:
> Define a "fake" mpool to provide a memory release callback for the
> memory hooks (munmap) and initialize the mallopt component, and
> nothing else.
> Use this mpool in the MX common initialization, supporting both BTL
> and MTL. Automatically set the MX_RCACHE environment variable to
> enable registration cache in MX.
>
> Tested with success for munmap() and large free().
>
>
> Added:
> trunk/ompi/mca/mpool/fake/
> trunk/ompi/mca/mpool/fake/Makefile.am
> trunk/ompi/mca/mpool/fake/configure.params
> trunk/ompi/mca/mpool/fake/mpool_fake.h
> trunk/ompi/mca/mpool/fake/mpool_fake_component.c
> trunk/ompi/mca/mpool/fake/mpool_fake_module.c
> Text files modified:
> trunk/ompi/mca/common/mx/common_mx.c | 56 +++++++++++++++++++++++++++++++++++++++
> 1 files changed, 55 insertions(+), 1 deletions(-)
>
> Modified: trunk/ompi/mca/common/mx/common_mx.c
> ==============================================================================
> --- trunk/ompi/mca/common/mx/common_mx.c (original)
> +++ trunk/ompi/mca/common/mx/common_mx.c 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> @@ -9,6 +9,8 @@
> * University of Stuttgart. All rights reserved.
> * Copyright (c) 2004-2006 The Regents of the University of California.
> * All rights reserved.
> + * Copyright (c) 2008 Myricom. All rights reserved.
> + *
> * $COPYRIGHT$
> *
> * Additional copyrights may follow
> @@ -21,11 +23,29 @@
> #include "ompi/constants.h"
> #include "common_mx.h"
>
> +#ifdef HAVE_MALLOC_H
> +#include <malloc.h>
> +#endif
> +#include "opal/memoryhooks/memory.h"
> +#include "opal/mca/base/mca_base_param.h"
> +#include "ompi/runtime/params.h"
> +#include "ompi/mca/mpool/mpool.h"
> +#include "ompi/mca/mpool/base/base.h"
> +#include "ompi/mca/mpool/fake/mpool_fake.h"
> +
> +
> +int mx__regcache_clean(void *ptr, size_t size);
> +
> static int ompi_common_mx_initialize_ref_cnt = 0;
> +static mca_mpool_base_module_t *ompi_common_mx_fake_mpool = 0;
> +
> int
> ompi_common_mx_initialize(void)
> {
> mx_return_t mx_return;
> + struct mca_mpool_base_resources_t mpool_resources;
> + int index, value;
> +
> ompi_common_mx_initialize_ref_cnt++;
>
> if(ompi_common_mx_initialize_ref_cnt == 1) {
> @@ -35,7 +55,37 @@
> * library does not exit the application.
> */
> mx_set_error_handler(MX_ERRORS_RETURN);
> -
> +
> + /* If we have a memory manager available, and
> + mpi_leave_pinned == -1, then set mpi_leave_pinned to 1.
> +
> + We have a memory manager if:
> + - we have both FREE and MUNMAP support
> + - we have MUNMAP support and the linux mallopt */
> + value = opal_mem_hooks_support_level();
> + if (((value & (OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT))
> + == (OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT))
> + || ((value & OPAL_MEMORY_MUNMAP_SUPPORT) &&
> + OMPI_MPOOL_BASE_HAVE_LINUX_MALLOPT)) {
> + index = mca_base_param_find("mpi", NULL, "leave_pinned");
> + if (index >= 0)
> + if ((mca_base_param_lookup_int(index, &value) == OPAL_SUCCESS)
> + && (value == -1)) {
> +
> + ompi_mpi_leave_pinned = 1;
> + setenv("MX_RCACHE", "2", 1);
> + mpool_resources.regcache_clean = mx__regcache_clean;
> + ompi_common_mx_fake_mpool =
> + mca_mpool_base_module_create("fake", NULL, &mpool_resources);
> + if (!ompi_common_mx_fake_mpool) {
> + ompi_mpi_leave_pinned = 0;
> + setenv("MX_RCACHE", "0", 1);
> + opal_output(0, "Error creating fake mpool (error %s)\n",
> + strerror(errno));
> + }
> + }
> + }
> +
> /* initialize the mx library */
> mx_return = mx_init();
>
> @@ -57,6 +107,10 @@
> mx_return_t mx_return;
> ompi_common_mx_initialize_ref_cnt--;
> if( 0 == ompi_common_mx_initialize_ref_cnt ) {
> +
> + if (ompi_common_mx_fake_mpool)
> + mca_mpool_base_module_destroy(ompi_common_mx_fake_mpool);
> +
> mx_return = mx_finalize();
> if(mx_return != MX_SUCCESS){
> opal_output(0, "Error in mx_finalize (error %s)\n", mx_strerror(mx_return));
>
> Added: trunk/ompi/mca/mpool/fake/Makefile.am
> ==============================================================================
> --- (empty file)
> +++ trunk/ompi/mca/mpool/fake/Makefile.am 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> @@ -0,0 +1,56 @@
> +#
> +# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> +# University Research and Technology
> +# Corporation. All rights reserved.
> +# Copyright (c) 2004-2005 The University of Tennessee and The University
> +# of Tennessee Research Foundation. All rights
> +# reserved.
> +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> +# University of Stuttgart. All rights reserved.
> +# Copyright (c) 2004-2005 The Regents of the University of California.
> +# All rights reserved.
> +# Copyright (c) 2008 Myricom. All rights reserved.
> +#
> +# $COPYRIGHT$
> +#
> +# Additional copyrights may follow
> +#
> +# $HEADER$
> +#
> +
> +AM_CPPFLAGS = $(mpool_fake_CPPFLAGS)
> +
> +sources = \
> + mpool_fake_module.c \
> + mpool_fake_component.c
> +
> +if WANT_INSTALL_HEADERS
> +ompidir = $(includedir)/openmpi/ompi/mca/mpool/fake
> +ompi_HEADERS = mpool_fake.h
> +else
> +ompidir = $(includedir)
> +ompi_HEADERS =
> +endif
> +
> +# Make the output library in this directory, and name it either
> +# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
> +# (for static builds).
> +
> +if OMPI_BUILD_mpool_fake_DSO
> +component_noinst =
> +component_install = mca_mpool_fake.la
> +else
> +component_noinst = libmca_mpool_fake.la
> +component_install =
> +endif
> +
> +mcacomponentdir = $(pkglibdir)
> +mcacomponent_LTLIBRARIES = $(component_install)
> +mca_mpool_fake_la_SOURCES = $(sources)
> +mca_mpool_fake_la_LDFLAGS = -module -avoid-version
> +mca_mpool_fake_la_LIBADD = $(mpool_fake_LIBS)
> +
> +noinst_LTLIBRARIES = $(component_noinst)
> +libmca_mpool_fake_la_SOURCES = $(sources)
> +libmca_mpool_fake_la_LDFLAGS = -module -avoid-version
> +libmca_mpool_fake_la_LIBADD = $(mpool_fake_LIBS)
>
> Added: trunk/ompi/mca/mpool/fake/configure.params
> ==============================================================================
> --- (empty file)
> +++ trunk/ompi/mca/mpool/fake/configure.params 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> @@ -0,0 +1,24 @@
> +# -*- shell-script -*-
> +#
> +# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> +# University Research and Technology
> +# Corporation. All rights reserved.
> +# Copyright (c) 2004-2005 The University of Tennessee and The University
> +# of Tennessee Research Foundation. All rights
> +# reserved.
> +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> +# University of Stuttgart. All rights reserved.
> +# Copyright (c) 2004-2005 The Regents of the University of California.
> +# All rights reserved.
> +# Copyright (c) 2008 Myricom. All rights reserved.
> +#
> +# $COPYRIGHT$
> +#
> +# Additional copyrights may follow
> +#
> +# $HEADER$
> +#
> +
> +# Specific to this module
> +
> +PARAM_CONFIG_FILES="Makefile"
>
> Added: trunk/ompi/mca/mpool/fake/mpool_fake.h
> ==============================================================================
> --- (empty file)
> +++ trunk/ompi/mca/mpool/fake/mpool_fake.h 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> @@ -0,0 +1,74 @@
> +/*
> + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> + * University Research and Technology
> + * Corporation. All rights reserved.
> + * Copyright (c) 2004-2006 The University of Tennessee and The University
> + * of Tennessee Research Foundation. All rights
> + * reserved.
> + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> + * University of Stuttgart. All rights reserved.
> + * Copyright (c) 2004-2005 The Regents of the University of California.
> + * All rights reserved.
> + * Copyright (c) 2008 Myricom. All rights reserved.
> + *
> + * $COPYRIGHT$
> + *
> + * Additional copyrights may follow
> + *
> + * $HEADER$
> + */
> +/**
> + * @file
> + */
> +
> +#ifndef MCA_MPOOL_FAKE_H
> +#define MCA_MPOOL_FAKE_H
> +
> +#include "ompi/mca/mpool/mpool.h"
> +
> +#if defined(c_plusplus) || defined(__cplusplus)
> +extern "C" {
> +#endif
> +
> +typedef struct mca_mpool_fake_component_t {
> + mca_mpool_base_component_t super;
> +} mca_mpool_fake_component_t;
> +
> +OMPI_DECLSPEC extern mca_mpool_fake_component_t mca_mpool_fake_component;
> +
> +typedef struct mca_mpool_base_resources_t {
> + int (*regcache_clean)(void *ptr, size_t size);
> +} mca_mpool_base_resources_t;
> +
> +typedef struct mca_mpool_fake_module_t {
> + mca_mpool_base_module_t super;
> + mca_mpool_base_resources_t resources;
> +} mca_mpool_fake_module_t;
> +
> +/*
> + * Initializes the mpool module.
> + */
> +void mca_mpool_fake_module_init(mca_mpool_fake_module_t *mpool);
> +
> +/**
> + * unregister all registration covering the block of memory
> + */
> +int mca_mpool_fake_release_memory(mca_mpool_base_module_t* mpool, void *base,
> + size_t size);
> +
> +/**
> + * finalize mpool
> + */
> +void mca_mpool_fake_finalize(struct mca_mpool_base_module_t *mpool);
> +
> +/**
> + * Fault Tolerance Event Notification Function
> + * @param state Checkpoint Stae
> + * @return OMPI_SUCCESS or failure status
> + */
> +int mca_mpool_fake_ft_event(int state);
> +
> +#if defined(c_plusplus) || defined(__cplusplus)
> +}
> +#endif
> +#endif
>
> Added: trunk/ompi/mca/mpool/fake/mpool_fake_component.c
> ==============================================================================
> --- (empty file)
> +++ trunk/ompi/mca/mpool/fake/mpool_fake_component.c 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> @@ -0,0 +1,87 @@
> +/*
> + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> + * University Research and Technology
> + * Corporation. All rights reserved.
> + * Copyright (c) 2004-2005 The University of Tennessee and The University
> + * of Tennessee Research Foundation. All rights
> + * reserved.
> + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> + * University of Stuttgart. All rights reserved.
> + * Copyright (c) 2004-2005 The Regents of the University of California.
> + * All rights reserved.
> + * Copyright (c) 2008 Myricom. All rights reserved.
> + *
> + * $COPYRIGHT$
> + *
> + * Additional copyrights may follow
> + *
> + * $HEADER$
> + */
> +
> +#define OMPI_DISABLE_ENABLE_MEM_DEBUG 1
> +#include "ompi_config.h"
> +#include "orte/util/show_help.h"
> +#include "opal/mca/base/base.h"
> +#include "opal/mca/base/mca_base_param.h"
> +#include "mpool_fake.h"
> +#include "orte/util/proc_info.h"
> +#ifdef HAVE_UNISTD_H
> +#include <unistd.h>
> +#endif
> +#ifdef HAVE_MALLOC_H
> +#include <malloc.h>
> +#endif
> +
> +/*
> + * Local functions
> + */
> +static int mca_mpool_fake_open(void);
> +static mca_mpool_base_module_t* mca_mpool_fake_init(
> + struct mca_mpool_base_resources_t* resources);
> +
> +mca_mpool_fake_component_t mca_mpool_fake_component = {
> + {
> + /* First, the mca_base_component_t struct containing meta
> + information about the component itself */
> +
> + {
> + MCA_MPOOL_BASE_VERSION_2_0_0,
> +
> + "fake", /* MCA component name */
> + OMPI_MAJOR_VERSION, /* MCA component major version */
> + OMPI_MINOR_VERSION, /* MCA component minor version */
> + OMPI_RELEASE_VERSION, /* MCA component release version */
> + mca_mpool_fake_open, /* component open */
> + NULL
> + },
> + {
> + /* The component is checkpoint ready */
> + MCA_BASE_METADATA_PARAM_CHECKPOINT
> + },
> +
> + mca_mpool_fake_init
> + }
> +};
> +
> +/**
> + * component open/close/init function
> + */
> +static int mca_mpool_fake_open(void)
> +{
> + return OMPI_SUCCESS;
> +}
> +
> +static mca_mpool_base_module_t* mca_mpool_fake_init(
> + struct mca_mpool_base_resources_t* resources)
> +{
> + mca_mpool_fake_module_t* mpool_module;
> +
> + mpool_module = (mca_mpool_fake_module_t*)
> + malloc(sizeof(mca_mpool_fake_module_t));
> +
> + mpool_module->resources = *resources;
> +
> + mca_mpool_fake_module_init(mpool_module);
> +
> + return &mpool_module->super;
> +}
>
> Added: trunk/ompi/mca/mpool/fake/mpool_fake_module.c
> ==============================================================================
> --- (empty file)
> +++ trunk/ompi/mca/mpool/fake/mpool_fake_module.c 2008-11-14 23:17:58 EST (Fri, 14 Nov 2008)
> @@ -0,0 +1,72 @@
> +/* -*- Mode: C; c-basic-offset:4 ; -*- */
> +/*
> + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
> + * University Research and Technology
> + * Corporation. All rights reserved.
> + * Copyright (c) 2004-2007 The University of Tennessee and The University
> + * of Tennessee Research Foundation. All rights
> + * reserved.
> + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
> + * University of Stuttgart. All rights reserved.
> + * Copyright (c) 2004-2005 The Regents of the University of California.
> + * All rights reserved.
> + * Copyright (c) 2008 Myricom. All rights reserved.
> + *
> + * $COPYRIGHT$
> + *
> + * Additional copyrights may follow
> + *
> + * $HEADER$
> + */
> +
> +#define OMPI_DISABLE_ENABLE_MEM_DEBUG 1
> +#include "ompi_config.h"
> +#include "opal/include/opal/align.h"
> +#include "orte/util/proc_info.h"
> +#include "orte/util/name_fns.h"
> +#include "orte/runtime/orte_globals.h"
> +#include "orte/util/show_help.h"
> +#include "mpool_fake.h"
> +#include <errno.h>
> +#include <string.h>
> +#include "ompi/mca/mpool/base/base.h"
> +#include "ompi/runtime/params.h"
> +
> +/*
> + * Initializes the mpool module.
> + */
> +void mca_mpool_fake_module_init(mca_mpool_fake_module_t* mpool)
> +{
> + mpool->super.mpool_component = &mca_mpool_fake_component.super;
> + mpool->super.mpool_base = NULL; /* no base .. */
> + mpool->super.mpool_alloc = NULL;
> + mpool->super.mpool_realloc = NULL;
> + mpool->super.mpool_free = NULL;
> + mpool->super.mpool_register = NULL;
> + mpool->super.mpool_find = NULL;
> + mpool->super.mpool_deregister = NULL;
> + mpool->super.mpool_release_memory = mca_mpool_fake_release_memory;
> + mpool->super.mpool_finalize = mca_mpool_fake_finalize;
> + mpool->super.mpool_ft_event = mca_mpool_fake_ft_event;
> +}
> +
> +
> +int mca_mpool_fake_release_memory(struct mca_mpool_base_module_t *mpool,
> + void *base, size_t size)
> +{
> + mca_mpool_fake_module_t *mpool_module = (mca_mpool_fake_module_t*)mpool;
> +
> + mpool_module->resources.regcache_clean(base, size);
> +
> + return OMPI_SUCCESS;
> +}
> +
> +void mca_mpool_fake_finalize(struct mca_mpool_base_module_t *mpool)
> +{
> + ;
> +}
> +
> +int mca_mpool_fake_ft_event(int state)
> +{
> + return OMPI_SUCCESS;
> +}
> _______________________________________________
> svn-full mailing list
> svn-full_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/svn-full