GRASS 8 Programmer's Manual 8.5.0RC1(2026)-3334b87d9c
Loading...
Searching...
No Matches
omp_threads.c
Go to the documentation of this file.
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#if defined(_OPENMP)
6#include <omp.h>
7#endif
8
9#include <grass/gis.h>
10#include <grass/glocale.h>
11
12/*! \brief Set the number of threads for OpenMP
13 The intended usage is at the beginning of a C tool when parameters are
14 processed, namely the G_OPT_M_NPROCS standard option.
15
16 If \em nprocs is set to 0, default OpenMP internal logic is used.
17 If \em nprocs is a positive number, specified number of threads is used.
18 If \em nprocs is a negative number, then <em>maximum threads - number</em>
19 is used instead (e.g. to keep \em number of cores free for other use.
20
21 \param opt A nprocs Option struct to specify the number of threads
22 \return the number of threads set up for OpenMP parallel computing
23*/
24int G_set_omp_num_threads(struct Option *opt)
25{
26 /* make sure Option is not null */
27 if (opt == NULL)
28 G_fatal_error(_("Option is NULL."));
29 else if (opt->key == NULL)
30 G_fatal_error(_("Option key is NULL."));
31
32 int threads = atoi(opt->answer);
33#if defined(_OPENMP)
34 if (threads == 0) {
35 threads = omp_get_max_threads();
36 }
37 else {
38 int num_logic_procs = omp_get_num_procs();
39 if (threads < 1) {
40 threads += num_logic_procs;
41 threads = (threads < 1) ? 1 : threads;
42 }
43 omp_set_num_threads(threads);
44 }
45 G_verbose_message(n_("One thread is set up for parallel computing.",
46 "%d threads are set up for parallel computing.",
47 threads),
48 threads);
49#else
50 if (!(threads == 0 || threads == 1)) {
51 G_warning(_("GRASS is not compiled with OpenMP support, parallel "
52 "computation is disabled. Only one thread will be used."));
53 }
54 threads = 1;
55#endif
56 return threads;
57}
#define NULL
Definition ccmath.h:32
void G_verbose_message(const char *msg,...)
Print a message to stderr but only if module is in verbose mode.
Definition gis/error.c:108
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
Definition gis/error.c:159
void G_warning(const char *msg,...)
Print a warning message to stderr.
Definition gis/error.c:203
int G_set_omp_num_threads(struct Option *opt)
Set the number of threads for OpenMP The intended usage is at the beginning of a C tool when paramete...
Definition omp_threads.c:24