GRASS 8 Programmer's Manual 8.6.0dev(2026)-ddeab64dbf
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*/
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) {
36 }
37 else {
39 if (threads < 1) {
41 threads = (threads < 1) ? 1 : threads;
42 }
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 void void void G_fatal_error(const char *,...) __attribute__((format(printf
void G_warning(const char *,...) __attribute__((format(printf
void void G_verbose_message(const char *,...) __attribute__((format(printf
#define n_(strs, strp, num)
Definition glocale.h:11
#define _(str)
Definition glocale.h:10
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
Structure that stores option information.
Definition gis.h:563