1
1
openmpi/config/ompi_check_mx.m4
George Bosilca 3eeecc3838 Add support for faster small messages. While sending a message, we check if
the data was buffered by the MX library. If it's the case then we declare
the send as completed and disable the completion event for the mx request.

This commit was SVN r12935.
2006-12-28 22:34:24 +00:00

153 строки
6.0 KiB
Bash

# -*- shell-script -*-
#
# 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$
#
# Additional copyrights may follow
#
# $HEADER$
#
AC_DEFUN([_OMPI_CHECK_MX_UNEXP_HANDLER],[
#
# Check if the MX library provide the mx_register_unexp_handler function.
# With this function, OMPI can avoid having a double matching logic
# (one on the MX library and one on OMPI) by registering our own matching
# function. Moreover, we can handle all eager messages with just one
# memcpy.
AC_MSG_CHECKING([for a MX version with mx_register_unexp_handler])
AC_TRY_LINK([#include <mx_extensions.h>],
[mx_register_unexp_handler(0, 0, 0);],
[mx_provide_unexp_handler="yes"],
[mx_provide_unexp_handler="no"])
AC_MSG_RESULT([$mx_provide_unexp_handler])
AS_IF([test x"$mx_provide_unexp_handler" = "xyes"],
[mx_provide_unexp_handler=1
$2],
[mx_provide_unexp_handler=0
$3])
AC_DEFINE_UNQUOTED([MX_HAVE_UNEXPECTED_HANDLER], [$mx_provide_unexp_handler],
[MX allow registration of an unexpected handler])
unset mx_provide_unexp_handler
])
AC_DEFUN([_OMPI_CHECK_MX_FORGET],[
#
# Check if the MX library provide the mx_forget function.
#
AC_MSG_CHECKING([for a MX version with mx_forget])
AC_TRY_LINK([#include <mx_extensions.h>],
[mx_forget(0, 0);],
[mx_provide_forget="yes"],
[mx_provide_forget="no"])
AC_MSG_RESULT([$mx_provide_forget])
AS_IF([test x"$mx_provide_forget" = "xyes"],
[mx_provide_forget=1
$2],
[mx_provide_forget=0
$3])
AC_DEFINE_UNQUOTED([MX_HAVE_FORGET], [$mx_provide_forget],
[MX allow to forget the completion event for mx_requests])
unset mx_provide_forget
])
AC_DEFUN([_OMPI_CHECK_MX_CONFIG],[
#
# See if we have MX_API. OpenMPI require a MX version bigger than
# the first MX relase (0x300)
#
# restored at end of OMPI_CHECK_MX
CPPFLAGS="$ompi_check_mx_$1_save_CPPFLAGS $$1_CPPFLAGS"
LDFLAGS="$ompi_check_mx_$1_save_LDFLAGS $$1_LDFLAGS"
LIBS="$ompi_check_mx_$1_save_LIBS $$1_LIBS"
AC_MSG_CHECKING([for MX version 1.0 or later])
AC_TRY_COMPILE([#include <myriexpress.h>],
[#if MX_API < 0x300
#error "Version less than 0x300"
#endif],
[have_recent_api="yes"],
[have_recent_api="no"])
AC_MSG_RESULT([$have_recent_api])
AC_MSG_CHECKING(for MX_API)
AS_IF([test x"$have_recent_api" = "xyes"],
[AC_DEFINE_UNQUOTED([OMPI_MCA_]m4_translit([$1], [a-z], [A-Z])[_API_VERSION], $mx_api_ver,
[Version of the MX API to use])
unset mx_api_ver have_mx_api_ver_msg found val msg
$2],
[$3])
AC_MSG_RESULT([$mx_api_ver])
])dnl
# OMPI_CHECK_MX(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
# check if MX support can be found. sets prefix_{CPPFLAGS,
# LDFLAGS, LIBS} as needed and runs action-if-found if there is
# support, otherwise executes action-if-not-found
AC_DEFUN([OMPI_CHECK_MX],[
AC_ARG_WITH([mx],
[AC_HELP_STRING([--with-mx(=DIR)],
[Build MX (Myrinet Express) support, searching for libraries in DIR])])
AC_ARG_WITH([mx-libdir],
[AC_HELP_STRING([--with-mx-libdir=DIR],
[Search for MX (Myrinet Express) libraries in DIR])])
ompi_check_mx_$1_save_CPPFLAGS="$CPPFLAGS"
ompi_check_mx_$1_save_LDFLAGS="$LDFLAGS"
ompi_check_mx_$1_save_LIBS="$LIBS"
AS_IF([test "$with_mx" != "no"],
[AS_IF([test ! -z "$with_mx" -a "$with_mx" != "yes"],
[ompi_check_mx_dir="$with_mx"])
AS_IF([test ! -z "$with_mx_libdir" -a "$with_mx_libdir" != "yes"],
[ompi_check_mx_libdir="$with_mx_libdir"])
OMPI_CHECK_PACKAGE([$1],
[myriexpress.h],
[myriexpress],
[mx_finalize],
[],
[$ompi_check_mx_dir],
[$ompi_check_mx_libdir],
[ompi_check_mx_happy="yes"],
[ompi_check_mx_happy="no"])],
[ompi_check_mx_happy="no"])
AS_IF([test "$ompi_check_mx_happy" = "yes"],
[_OMPI_CHECK_MX_CONFIG($1, [ompi_check_mx_happy="yes"],
[ompi_check_mx_happy="no"])])
AS_IF([test "$ompi_check_mx_happy" = "yes"],
[_OMPI_CHECK_MX_UNEXP_HANDLER($1, [ompi_check_mx_register="yes"],
[ompi_check_mx_register="no"])])
AS_IF([test "$ompi_check_mx_happy" = "yes"],
[_OMPI_CHECK_MX_FORGET($1, [ompi_check_mx_register="yes"],
[ompi_check_mx_register="no"])])
CPPFLAGS="$ompi_check_mx_$1_save_CPPFLAGS"
LDFLAGS="$ompi_check_mx_$1_save_LDFLAGS"
LIBS="$ompi_check_mx_$1_save_LIBS"
AS_IF([test "$ompi_check_mx_happy" = "yes" -a "$enable_progress_threads" = "yes"],
[AC_MSG_WARN([MX driver does not currently support progress threads. Disabling BTL.])
ompi_check_mx_happy="no"])
AS_IF([test "$ompi_check_mx_happy" = "yes"],
[$2],
[AS_IF([test ! -z "$with_mx" -a "$with_mx" != "no"],
[AC_MSG_ERROR([MX support requested but not found. Aborting])])
$3])
])