From 78d6c84de570b81641e962a3cc3de57c94ec8b5e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste CAYROU Date: Mon, 30 Jul 2012 10:18:47 +0200 Subject: [PATCH] Add option for multi-threading. Auto-detection of openmp in gammalib. --- configure.ac | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- m4/ax_openmp.m4 | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 m4/ax_openmp.m4 diff --git a/configure.ac b/configure.ac index 7c9d9e6..f3226c9 100644 --- a/configure.ac +++ b/configure.ac @@ -29,7 +29,7 @@ ############################################################################# # Initialisation # ############################################################################# -AC_INIT([ctools], [0.5.0], [jurgen.knodlseder@irap.omp.eu], [ctools]) +AC_INIT([ctools], [0.4.0], [jurgen.knodlseder@irap.omp.eu], [ctools]) AC_CONFIG_SRCDIR([src/ctselect/ctselect.cpp]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([gnu no-dependencies]) @@ -498,6 +498,7 @@ AC_C_CONST AC_C_INLINE + ############################################################################# # Checks if Python bindings are to be build # # ------------------------------------------------------------------------- # @@ -687,6 +688,57 @@ root directory of GammaLib.]) fi + +############################################################################# +# Checks for OpenMP checking option (G_OPENMP) # +############################################################################ + +openmp_ok=no + +# Detect if GammaLib has been compiled with OpenMP +AC_MSG_CHECKING(if GammaLib has been compiled with OpenMP) +AC_LINK_IFELSE(AC_LANG_PROGRAM([[#include ]],,), + [gammalib_with_openmp=no;AC_MSG_RESULT(no)], + [gammalib_with_openmp=yes;AC_MSG_RESULT(yes)]) + +# Check if openMP is available +m4_ifdef([AC_OPENMP],[AC_OPENMP], [AX_OPENMP([openmp_ok=yes],[openmp_ok=no])]) +if test "x$ac_cv_prog_cxx_openmp" != "xunsupported" && test "x$ac_cv_prog_cxx_openmp" != "x"; then + openmp_ok=yes +fi + +AC_MSG_CHECKING(whether to enable openMP) + +#openMP is available +if test "x$openmp_ok" = "xyes"; then + #if gammalib is compiled with openMP, ctools must have it. + if test "x$gammalib_with_openmp" = "xyes"; then + enable_openmp="yes" + else + #Else, we propose the option + AC_ARG_ENABLE([openmp], + AS_HELP_STRING([--enable-openmp], + [To active multi-threading [default=yes]]), + [enable_openmp="$enableval"], + [enable_openmp="yes"]) + fi +fi + +if test "x$enable_openmp" = "xyes"; then + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" + AC_MSG_RESULT(yes) + else + enable_openmp=no + AC_MSG_RESULT(no) +fi + +if test "x$enable_openmp" = "xno" && test "x$gammalib_with_openmp" = "xyes"; then + #Error, we cannot compile. + 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.]) +fi + +AM_CONDITIONAL(OPENMP,test "x$enable_openmp" = "xyes") + ############################################################################# # Build static code? # ############################################################################# @@ -794,6 +846,11 @@ else fi # Dump compile options +if test "x$enable_openmp" = "xyes"; then + echo " * Enable openMP (yes) (default)" +else + echo " - Enable openMP (no)" +fi if test "x$enable_debug" = "xyes"; then echo " * Compile in debug code (yes)" else diff --git a/m4/ax_openmp.m4 b/m4/ax_openmp.m4 new file mode 100644 index 0000000..7ea794b --- /dev/null +++ b/m4/ax_openmp.m4 @@ -0,0 +1,99 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_openmp.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro tries to find out how to compile programs that use OpenMP a +# standard API and set of compiler directives for parallel programming +# (see http://www-unix.mcs/) +# +# On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS +# output variable to the flag (e.g. -omp) used both to compile *and* link +# OpenMP programs in the current language. +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. +# +# If you want to compile everything with OpenMP, you should set: +# +# CFLAGS="$CFLAGS $OPENMP_CFLAGS" +# #OR# CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +# #OR# FFLAGS="$FFLAGS $OPENMP_FFLAGS" +# +# (depending on the selected language). +# +# The user can override the default choice by setting the corresponding +# environment variable (e.g. OPENMP_CFLAGS). +# +# ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is +# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is +# not found. If ACTION-IF-FOUND is not specified, the default action will +# define HAVE_OPENMP. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 8 + +AC_DEFUN([AX_OPENMP], [ +AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX + +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 +ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown +# Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI), +# -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none +ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then + ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;; + *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;; + esac + AC_TRY_LINK_FUNC(omp_set_num_threads, + [ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break]) +done +[]_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS +]) +if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then + m4_default([$2],:) +else + if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then + OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp + fi + m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])]) +fi +])dnl AX_OPENMP -- libgit2 0.21.4