Commit 78d6c84de570b81641e962a3cc3de57c94ec8b5e
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 | ... | ... |