]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgomp/config/mingw32/proc.c
Update copyright years.
[thirdparty/gcc.git] / libgomp / config / mingw32 / proc.c
CommitLineData
a5544970 1/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
1d0bd356
DS
2 Contributed by Danny Smith <dannysmith@users.sourceforge.net>
3
f1f3453e
TS
4 This file is part of the GNU Offloading and Multi Processing Library
5 (libgomp).
1d0bd356
DS
6
7 Libgomp is free software; you can redistribute it and/or modify it
748086b7
JJ
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
1d0bd356
DS
11
12 Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
748086b7 14 FOR A PARTICULAR PURPOSE. See the GNU General Public License for
1d0bd356
DS
15 more details.
16
748086b7
JJ
17 Under Section 7 of GPL version 3, you are granted additional
18 permissions described in the GCC Runtime Library Exception, version
19 3.1, as published by the Free Software Foundation.
20
21 You should have received a copy of the GNU General Public License and
22 a copy of the GCC Runtime Library Exception along with this program;
23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24 <http://www.gnu.org/licenses/>. */
1d0bd356
DS
25
26/* This file contains system specific routines related to counting
27 online processors and dynamic load balancing. It is expected that
28 a system may well want to write special versions of each of these.
29
30 The following implementation uses win32 API routines. */
31
32#include "libgomp.h"
33#include <windows.h>
34
35/* Count the CPU's currently available to this process. */
a68ab351 36static unsigned int
1d0bd356
DS
37count_avail_process_cpus ()
38{
39 DWORD_PTR process_cpus;
40 DWORD_PTR system_cpus;
41
42 if (GetProcessAffinityMask (GetCurrentProcess (),
43 &process_cpus, &system_cpus))
44 {
45 unsigned int count;
46 for (count = 0; process_cpus != 0; process_cpus >>= 1)
47 if (process_cpus & 1)
48 count++;
49 return count;
50 }
51 return 1;
52}
53
54/* At startup, determine the default number of threads. It would seem
55 this should be related to the number of cpus available to the process. */
56
57void
58gomp_init_num_threads (void)
59{
a68ab351 60 gomp_global_icv.nthreads_var = count_avail_process_cpus ();
1d0bd356
DS
61}
62
63/* When OMP_DYNAMIC is set, at thread launch determine the number of
64 threads we should spawn for this team. FIXME: How do we adjust for
65 load average on MS Windows? */
66
67unsigned
68gomp_dynamic_max_threads (void)
69{
a68ab351
JJ
70 unsigned int n_onln = count_avail_process_cpus ();
71 unsigned int nthreads_var = gomp_icv (false)->nthreads_var;
72 return n_onln > nthreads_var ? nthreads_var : n_onln;
1d0bd356
DS
73}
74
75int
76omp_get_num_procs (void)
77{
78 return count_avail_process_cpus ();
79}
80
81ialias (omp_get_num_procs)