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,6 +569,36 @@ else | ||
| 569 | AC_MSG_RESULT(no) | 569 | AC_MSG_RESULT(no) |
| 570 | fi | 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 | # Checks if Python bindings are to be build # | 604 | # Checks if Python bindings are to be build # |
| @@ -680,6 +710,7 @@ if test "x$enable_python" = "xyes"; then | @@ -680,6 +710,7 @@ if test "x$enable_python" = "xyes"; then | ||
| 680 | fi | 710 | fi |
| 681 | 711 | ||
| 682 | 712 | ||
| 713 | + | ||
| 683 | ############################################################################# | 714 | ############################################################################# |
| 684 | # Initialise directory path for test environment # | 715 | # Initialise directory path for test environment # |
| 685 | ############################################################################# | 716 | ############################################################################# |
| @@ -1151,6 +1182,11 @@ if test "x$SMALL_MEMORY" = "xyes"; then | @@ -1151,6 +1182,11 @@ if test "x$SMALL_MEMORY" = "xyes"; then | ||
| 1151 | else | 1182 | else |
| 1152 | echo " - Optimize memory usage (no)" | 1183 | echo " - Optimize memory usage (no)" |
| 1153 | fi | 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 | if test "x$enable_debug" = "xyes"; then | 1190 | if test "x$enable_debug" = "xyes"; then |
| 1155 | echo " * Compile in debug code (yes)" | 1191 | echo " * Compile in debug code (yes)" |
| 1156 | else | 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,6 +148,17 @@ if '@WITH_INST_LAT_TRUE@' != '#': | ||
| 148 | # Set extension definition for core modules | 148 | # Set extension definition for core modules |
| 149 | ext_modules = [] | 149 | ext_modules = [] |
| 150 | py_modules = [] | 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 | for module in core_modules: | 162 | for module in core_modules: |
| 152 | 163 | ||
| 153 | # Define module | 164 | # Define module |
| @@ -155,7 +166,9 @@ for module in core_modules: | @@ -155,7 +166,9 @@ for module in core_modules: | ||
| 155 | include_dirs=include_dirs, \ | 166 | include_dirs=include_dirs, \ |
| 156 | libraries=libraries, | 167 | libraries=libraries, |
| 157 | library_dirs=library_dirs, | 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 | ext_modules.append(ext_module) | 172 | ext_modules.append(ext_module) |
| 160 | py_modules.append(pkg_name+'.'+module) | 173 | py_modules.append(pkg_name+'.'+module) |
| 161 | 174 | ||
| @@ -178,7 +191,9 @@ for module in inst_modules: | @@ -178,7 +191,9 @@ for module in inst_modules: | ||
| 178 | include_dirs=include_dirs, \ | 191 | include_dirs=include_dirs, \ |
| 179 | libraries=libraries, | 192 | libraries=libraries, |
| 180 | library_dirs=library_dirs, | 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 | ext_modules.append(ext_module) | 197 | ext_modules.append(ext_module) |
| 183 | py_modules.append(pkg_name+'.'+module) | 198 | py_modules.append(pkg_name+'.'+module) |
| 184 | 199 |