automation for setting GMX_GPU & cmake GPU detection
[gromacs.git] / include / gmx_omp_nthreads.h
bloba0b5613368e30900957bcba0d8605ea8b6830296
1 /* -*- mode: c; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; c-file-style: "stroustrup"; -*-
4 * This source code is part of
6 * G R O M A C S
8 * GROningen MAchine for Chemical Simulations
10 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12 * Copyright (c) 2001-2012, The GROMACS development team,
13 * check out http://www.gromacs.org for more information.
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * If you want to redistribute modifications, please consider that
21 * scientific software is very special. Version control is crucial -
22 * bugs must be traceable. We will be happy to consider code for
23 * inclusion in the official distribution, but derived work must not
24 * be called official GROMACS. Details are found in the README & COPYING
25 * files - if they are missing, get the official version at www.gromacs.org.
27 * To help us fund GROMACS development, we humbly ask that you cite
28 * the papers on the package - you can find them in the top README file.
30 * For more info, check our website at http://www.gromacs.org
32 * And Hey:
33 * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
36 #ifndef GMX_OMP_NTHREADS
37 #define GMX_OMP_NTHREADS
38 #include "visibility.h"
39 #include "types/commrec.h"
42 /*! Enum values corresponding to multithreaded algorithmic modules. */
43 typedef enum module_nth
45 /* Default is meant to be used in OMP regions outside the named
46 * algorithmic modules listed below. */
47 emntDefault, emntDomdec, emntPairsearch, emntNonbonded,
48 emntBonded, emntPME, emntUpdate, emntVSITE, emntLINCS, emntSETTLE,
49 emntNR
50 } module_nth_t;
52 /*! Initializes the per-module thread count. It is compatible with tMPI,
53 * thread-safety is ensured (for the features available with tMPI).
54 * This function should caled only once during the initialization of mdrun. */
55 GMX_LIBGMX_EXPORT
56 void gmx_omp_nthreads_init(FILE *fplog, t_commrec *cr,
57 int nthreads_hw_avail,
58 int omp_nthreads_req,
59 int omp_nthreads_pme_req,
60 gmx_bool bCurrNodePMEOnly,
61 gmx_bool bFullOmpSupport);
63 /*! Returns the number of threads to be used in the given module m. */
64 GMX_LIBGMX_EXPORT
65 int gmx_omp_nthreads_get(int mod);
67 /*! Read the OMP_NUM_THREADS env. var. and check against the value set on the command line. */
68 GMX_LIBGMX_EXPORT
69 void gmx_omp_nthreads_read_env(int *nthreads_omp);
71 #endif /* GMX_OMP_NTHREADS */