diff options
author | dannysmith <dannysmith@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-10 02:27:29 +0000 |
---|---|---|
committer | dannysmith <dannysmith@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-09-10 02:27:29 +0000 |
commit | 7169d0ea21c5566a7a14f158853b5118e6dafad5 (patch) | |
tree | 1fb15b38c1f95381d9466b96e385808549eac105 /libgomp/config | |
parent | f6a9a0d56b9554ccef4b2da28cb9e54e40194cd2 (diff) | |
download | gcc-7169d0ea21c5566a7a14f158853b5118e6dafad5.tar.gz |
* config/mingw32/proc.c: New file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128321 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp/config')
-rw-r--r-- | libgomp/config/mingw32/proc.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/libgomp/config/mingw32/proc.c b/libgomp/config/mingw32/proc.c new file mode 100644 index 00000000000..def7bb5e8f4 --- /dev/null +++ b/libgomp/config/mingw32/proc.c @@ -0,0 +1,82 @@ +/* Copyright (C) 2007 Free Software Foundation, Inc. + Contributed by Danny Smith <dannysmith@users.sourceforge.net> + + This file is part of the GNU OpenMP Library (libgomp). + + Libgomp is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with libgomp; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +/* As a special exception, if you link this library with other files, some + of which are compiled with GCC, to produce an executable, this library + does not by itself cause the resulting executable to be covered by the + GNU General Public License. This exception does not however invalidate + any other reasons why the executable file might be covered by the GNU + General Public License. */ + +/* This file contains system specific routines related to counting + online processors and dynamic load balancing. It is expected that + a system may well want to write special versions of each of these. + + The following implementation uses win32 API routines. */ + +#include "libgomp.h" +#include <windows.h> + +/* Count the CPU's currently available to this process. */ +static int +count_avail_process_cpus () +{ + DWORD_PTR process_cpus; + DWORD_PTR system_cpus; + + if (GetProcessAffinityMask (GetCurrentProcess (), + &process_cpus, &system_cpus)) + { + unsigned int count; + for (count = 0; process_cpus != 0; process_cpus >>= 1) + if (process_cpus & 1) + count++; + return count; + } + return 1; +} + +/* At startup, determine the default number of threads. It would seem + this should be related to the number of cpus available to the process. */ + +void +gomp_init_num_threads (void) +{ + gomp_nthreads_var = count_avail_process_cpus (); +} + +/* When OMP_DYNAMIC is set, at thread launch determine the number of + threads we should spawn for this team. FIXME: How do we adjust for + load average on MS Windows? */ + +unsigned +gomp_dynamic_max_threads (void) +{ + int n_onln = count_avail_process_cpus (); + return n_onln > gomp_nthreads_var ? gomp_nthreads_var : n_onln; +} + +int +omp_get_num_procs (void) +{ + return count_avail_process_cpus (); +} + +ialias (omp_get_num_procs) |