Commit 04b5da324ee2dd6e0310488e239cee18caaec621

Authored by Jean-Baptiste CAYROU
1 parent 8bc45976

Add openmp option and dectection for ./configure command (multi-threading)

configure.ac
... ... @@ -569,6 +569,36 @@ else
569 569 AC_MSG_RESULT(no)
570 570 fi
571 571  
  572 +#############################################################################
  573 +# Checks for OpenMP checking option (G_OPENMP) #
  574 +#############################################################################
  575 +openmp_ok=no
  576 +
  577 +m4_ifdef([AC_OPENMP],m4_pattern_allow([AC_OPENMP]), [AX_OPENMP([openmp_ok=yes],[openmp_ok=no])])
  578 +if test "x$ac_cv_prog_cxx_openmp" != "xunsupported" && test "x$ac_cv_prog_cxx_openmp" != "x"; then
  579 + openmp_ok=yes
  580 +fi
  581 +
  582 +
  583 +if test "x$openmp_ok" = "xyes" ; then
  584 +
  585 + AC_MSG_CHECKING(whether to enable openMP)
  586 + AC_ARG_ENABLE([openmp],
  587 + AS_HELP_STRING([--enable-openmp],
  588 + [To active multi-threading [default=yes]]),
  589 + [enable_openmp_="$enableval"],
  590 + [enable_openmp="yes"])
  591 +
  592 + if test "x$enable_openmp" = "xyes"; then
  593 + CXXFLAGS="$CXXFLAGS $OPENMP_CFLAGS"
  594 + AC_MSG_RESULT(yes)
  595 + else
  596 + enable_openmp=no
  597 + AC_MSG_RESULT(no)
  598 + fi
  599 +fi
  600 +
  601 +AM_CONDITIONAL(OPENMP,test "x$openmp_ok" = "xyes" && test "x$enable_openmp" = "xyes")
572 602  
573 603 #############################################################################
574 604 # Checks if Python bindings are to be build #
... ... @@ -680,6 +710,7 @@ if test "x$enable_python" = "xyes"; then
680 710 fi
681 711  
682 712  
  713 +
683 714 #############################################################################
684 715 # Initialise directory path for test environment #
685 716 #############################################################################
... ... @@ -1151,6 +1182,11 @@ if test "x$SMALL_MEMORY" = "xyes"; then
1151 1182 else
1152 1183 echo " - Optimize memory usage (no)"
1153 1184 fi
  1185 +if test "x$enable_openmp" = "xyes"; then
  1186 + echo " * Enable openMP (yes) (default)"
  1187 +else
  1188 + echo " - Enable openMP (no)"
  1189 +fi
1154 1190 if test "x$enable_debug" = "xyes"; then
1155 1191 echo " * Compile in debug code (yes)"
1156 1192 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
... ...
pyext/setup.py.in
... ... @@ -148,6 +148,17 @@ if &#39;@WITH_INST_LAT_TRUE@&#39; != &#39;#&#39;:
148 148 # Set extension definition for core modules
149 149 ext_modules = []
150 150 py_modules = []
  151 +
  152 +# extra args
  153 +extra_compile_args = []
  154 +extra_link_args = []
  155 +
  156 +# enable OPENMP
  157 +if '@OPENMP_TRUE@' != '#':
  158 + extra_compile_args=['-fopenmp']
  159 + extra_link_args=['-fopenmp']
  160 +
  161 +
151 162 for module in core_modules:
152 163  
153 164 # Define module
... ... @@ -155,7 +166,9 @@ for module in core_modules:
155 166 include_dirs=include_dirs, \
156 167 libraries=libraries,
157 168 library_dirs=library_dirs,
158   - runtime_library_dirs=runtime_library_dirs)
  169 + runtime_library_dirs=runtime_library_dirs,
  170 + extra_compile_args=extra_compile_args,
  171 + extra_link_args=extra_link_args)
159 172 ext_modules.append(ext_module)
160 173 py_modules.append(pkg_name+'.'+module)
161 174  
... ... @@ -178,7 +191,9 @@ for module in inst_modules:
178 191 include_dirs=include_dirs, \
179 192 libraries=libraries,
180 193 library_dirs=library_dirs,
181   - runtime_library_dirs=runtime_library_dirs)
  194 + runtime_library_dirs=runtime_library_dirs,
  195 + extra_compile_args=extra_compile_args,
  196 + extra_link_args=extra_link_args)
182 197 ext_modules.append(ext_module)
183 198 py_modules.append(pkg_name+'.'+module)
184 199  
... ...