
protocol over the MX BTL. Now, we have only one matching, the one in Open MPI. The problem is that when the unexpected handler is triggered, not all the message is on the host memory. In the best case we get one MX fragment (internal MX fragment), in the worst we get NULL. The only way to fit this with the design of the PML is to force the eager protocol at the MX internal fragment size, and to limit the send/receive protocol at the same size. Tests show the outcome is not far from optimal (if the pipeline depth is increased a little bit). Set MX_PIPELINE_LOG in order to allow MX to use internal fragments of 4K. This commit was SVN r12930.
130 строки
5.1 KiB
Bash
130 строки
5.1 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_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"])])
|
|
|
|
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])
|
|
])
|
|
|