Commit 78d6c84de570b81641e962a3cc3de57c94ec8b5e

Authored by Jean-Baptiste CAYROU
1 parent 9baf2d5e

Add option for multi-threading. Auto-detection of openmp in gammalib.

Showing 2 changed files with 157 additions and 1 deletions
configure.ac
... ... @@ -29,7 +29,7 @@
29 29 #############################################################################
30 30 # Initialisation #
31 31 #############################################################################
32   -AC_INIT([ctools], [0.5.0], [jurgen.knodlseder@irap.omp.eu], [ctools])
  32 +AC_INIT([ctools], [0.4.0], [jurgen.knodlseder@irap.omp.eu], [ctools])
33 33 AC_CONFIG_SRCDIR([src/ctselect/ctselect.cpp])
34 34 AC_CONFIG_MACRO_DIR([m4])
35 35 AM_INIT_AUTOMAKE([gnu no-dependencies])
... ... @@ -498,6 +498,7 @@ AC_C_CONST
498 498 AC_C_INLINE
499 499  
500 500  
  501 +
501 502 #############################################################################
502 503 # Checks if Python bindings are to be build #
503 504 # ------------------------------------------------------------------------- #
... ... @@ -687,6 +688,57 @@ root directory of GammaLib.])
687 688 fi
688 689  
689 690  
  691 +
  692 +#############################################################################
  693 +# Checks for OpenMP checking option (G_OPENMP) #
  694 +############################################################################
  695 +
  696 +openmp_ok=no
  697 +
  698 +# Detect if GammaLib has been compiled with OpenMP
  699 +AC_MSG_CHECKING(if GammaLib has been compiled with OpenMP)
  700 +AC_LINK_IFELSE(AC_LANG_PROGRAM([[#include <GObservations.hpp>]],,),
  701 + [gammalib_with_openmp=no;AC_MSG_RESULT(no)],
  702 + [gammalib_with_openmp=yes;AC_MSG_RESULT(yes)])
  703 +
  704 +# Check if openMP is available
  705 +m4_ifdef([AC_OPENMP],[AC_OPENMP], [AX_OPENMP([openmp_ok=yes],[openmp_ok=no])])
  706 +if test "x$ac_cv_prog_cxx_openmp" != "xunsupported" && test "x$ac_cv_prog_cxx_openmp" != "x"; then
  707 + openmp_ok=yes
  708 +fi
  709 +
  710 +AC_MSG_CHECKING(whether to enable openMP)
  711 +
  712 +#openMP is available
  713 +if test "x$openmp_ok" = "xyes"; then
  714 + #if gammalib is compiled with openMP, ctools must have it.
  715 + if test "x$gammalib_with_openmp" = "xyes"; then
  716 + enable_openmp="yes"
  717 + else
  718 + #Else, we propose the option
  719 + AC_ARG_ENABLE([openmp],
  720 + AS_HELP_STRING([--enable-openmp],
  721 + [To active multi-threading [default=yes]]),
  722 + [enable_openmp="$enableval"],
  723 + [enable_openmp="yes"])
  724 + fi
  725 +fi
  726 +
  727 +if test "x$enable_openmp" = "xyes"; then
  728 + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
  729 + AC_MSG_RESULT(yes)
  730 + else
  731 + enable_openmp=no
  732 + AC_MSG_RESULT(no)
  733 +fi
  734 +
  735 +if test "x$enable_openmp" = "xno" && test "x$gammalib_with_openmp" = "xyes"; then
  736 + #Error, we cannot compile.
  737 + AC_MSG_ERROR([The GammaLib library has been built with openmp option but openmp is not available on this system. Please install the libarie or re-build gammalib.])
  738 +fi
  739 +
  740 +AM_CONDITIONAL(OPENMP,test "x$enable_openmp" = "xyes")
  741 +
690 742 #############################################################################
691 743 # Build static code? #
692 744 #############################################################################
... ... @@ -794,6 +846,11 @@ else
794 846 fi
795 847  
796 848 # Dump compile options
  849 +if test "x$enable_openmp" = "xyes"; then
  850 + echo " * Enable openMP (yes) (default)"
  851 +else
  852 + echo " - Enable openMP (no)"
  853 +fi
797 854 if test "x$enable_debug" = "xyes"; then
798 855 echo " * Compile in debug code (yes)"
799 856 else
... ...
m4/ax_openmp.m4 0 → 100644
  1 +# ===========================================================================
  2 +# http://www.gnu.org/software/autoconf-archive/ax_openmp.html
  3 +# ===========================================================================
  4 +#
  5 +# SYNOPSIS
  6 +#
  7 +# AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
  8 +#
  9 +# DESCRIPTION
  10 +#
  11 +# This macro tries to find out how to compile programs that use OpenMP a
  12 +# standard API and set of compiler directives for parallel programming
  13 +# (see http://www-unix.mcs/)
  14 +#
  15 +# On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS
  16 +# output variable to the flag (e.g. -omp) used both to compile *and* link
  17 +# OpenMP programs in the current language.
  18 +#
  19 +# NOTE: You are assumed to not only compile your program with these flags,
  20 +# but also link it with them as well.
  21 +#
  22 +# If you want to compile everything with OpenMP, you should set:
  23 +#
  24 +# CFLAGS="$CFLAGS $OPENMP_CFLAGS"
  25 +# #OR# CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
  26 +# #OR# FFLAGS="$FFLAGS $OPENMP_FFLAGS"
  27 +#
  28 +# (depending on the selected language).
  29 +#
  30 +# The user can override the default choice by setting the corresponding
  31 +# environment variable (e.g. OPENMP_CFLAGS).
  32 +#
  33 +# ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is
  34 +# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is
  35 +# not found. If ACTION-IF-FOUND is not specified, the default action will
  36 +# define HAVE_OPENMP.
  37 +#
  38 +# LICENSE
  39 +#
  40 +# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
  41 +#
  42 +# This program is free software: you can redistribute it and/or modify it
  43 +# under the terms of the GNU General Public License as published by the
  44 +# Free Software Foundation, either version 3 of the License, or (at your
  45 +# option) any later version.
  46 +#
  47 +# This program is distributed in the hope that it will be useful, but
  48 +# WITHOUT ANY WARRANTY; without even the implied warranty of
  49 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  50 +# Public License for more details.
  51 +#
  52 +# You should have received a copy of the GNU General Public License along
  53 +# with this program. If not, see <http://www.gnu.org/licenses/>.
  54 +#
  55 +# As a special exception, the respective Autoconf Macro's copyright owner
  56 +# gives unlimited permission to copy, distribute and modify the configure
  57 +# scripts that are the output of Autoconf when processing the Macro. You
  58 +# need not follow the terms of the GNU General Public License when using
  59 +# or distributing such scripts, even though portions of the text of the
  60 +# Macro appear in them. The GNU General Public License (GPL) does govern
  61 +# all other use of the material that constitutes the Autoconf Macro.
  62 +#
  63 +# This special exception to the GPL applies to versions of the Autoconf
  64 +# Macro released by the Autoconf Archive. When you make and distribute a
  65 +# modified version of the Autoconf Macro, you may extend this special
  66 +# exception to the GPL to apply to your modified version as well.
  67 +
  68 +#serial 8
  69 +
  70 +AC_DEFUN([AX_OPENMP], [
  71 +AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX
  72 +
  73 +AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
  74 +ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown
  75 +# Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI),
  76 +# -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none
  77 +ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none"
  78 +if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then
  79 + ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags"
  80 +fi
  81 +for ax_openmp_flag in $ax_openmp_flags; do
  82 + case $ax_openmp_flag in
  83 + none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;;
  84 + *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;;
  85 + esac
  86 + AC_TRY_LINK_FUNC(omp_set_num_threads,
  87 + [ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break])
  88 +done
  89 +[]_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS
  90 +])
  91 +if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then
  92 + m4_default([$2],:)
  93 +else
  94 + if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then
  95 + OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp
  96 + fi
  97 + m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])])
  98 +fi
  99 +])dnl AX_OPENMP
... ...