diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-04-20 17:37:51 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-04-20 17:37:51 +0200 |
commit | e4ba7a600e70bce0065a2fde0f2f85cdee746cfb (patch) | |
tree | f290c50df00f07577021b710e347cd10c8be0b82 /libgomp/config/linux/proc.c | |
parent | 5221d7a91b9d6b674fb473675274099f1da939dd (diff) | |
download | gcc-e4ba7a600e70bce0065a2fde0f2f85cdee746cfb.zip gcc-e4ba7a600e70bce0065a2fde0f2f85cdee746cfb.tar.gz gcc-e4ba7a600e70bce0065a2fde0f2f85cdee746cfb.tar.bz2 |
re PR libgomp/43706 (scheduling two threads on one core leads to starvation)
PR libgomp/43706
* config/linux/affinity.c (gomp_init_affinity): Decrease
gomp_available_cpus if affinity mask confines the process to fewer
CPUs.
* config/linux/proc.c (get_num_procs): If gomp_cpu_affinity is
non-NULL, just return gomp_available_cpus.
From-SVN: r158565
Diffstat (limited to 'libgomp/config/linux/proc.c')
-rw-r--r-- | libgomp/config/linux/proc.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/libgomp/config/linux/proc.c b/libgomp/config/linux/proc.c index dad6237..01f51df 100644 --- a/libgomp/config/linux/proc.c +++ b/libgomp/config/linux/proc.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. Contributed by Jakub Jelinek <jakub@redhat.com>. This file is part of the GNU OpenMP Library (libgomp). @@ -104,26 +105,13 @@ get_num_procs (void) } else { - size_t idx; - static int affinity_cpus; - /* We can't use pthread_getaffinity_np in this case (we have changed it ourselves, it binds to just one CPU). Count instead the number of different CPUs we are - using. */ - CPU_ZERO (&cpuset); - if (affinity_cpus == 0) - { - int cpus = 0; - for (idx = 0; idx < gomp_cpu_affinity_len; idx++) - if (! CPU_ISSET (gomp_cpu_affinity[idx], &cpuset)) - { - cpus++; - CPU_SET (gomp_cpu_affinity[idx], &cpuset); - } - affinity_cpus = cpus; - } - return affinity_cpus; + using. gomp_init_affinity updated gomp_available_cpus to + the number of CPUs in the GOMP_AFFINITY mask that we are + allowed to use though. */ + return gomp_available_cpus; } #endif #ifdef _SC_NPROCESSORS_ONLN |