Commit 04b5da324ee2dd6e0310488e239cee18caaec621
1 parent
8bc45976
Add openmp option and dectection for ./configure command (multi-threading)
Showing
3 changed files
with
152 additions
and
2 deletions
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 '@WITH_INST_LAT_TRUE@' != '#': |
| 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 | ... | ... |