openmp: Fix up handling of OMP_PLACES=threads(1)
When writing the places-*.c tests, I've noticed that we mishandle threads abstract name with specified num-places if num-places isn't a multiple of number of hw threads in a core. It then happily ignores the maximum count and overwrites for the remaining hw threads in a core further places that haven't been allocated. 2021-10-15 Jakub Jelinek <jakub@redhat.com> * config/linux/affinity.c (gomp_affinity_init_level_1): For level 1 after creating count places clean up and return immediately. * testsuite/libgomp.c/places-6.c: New test. * testsuite/libgomp.c/places-7.c: New test. * testsuite/libgomp.c/places-8.c: New test. * testsuite/libgomp.c/places-9.c: New test. * testsuite/libgomp.c/places-10.c: New test.
This commit is contained in:
parent
f3d64372d7
commit
4764049dd6
6 changed files with 57 additions and 2 deletions
|
@ -338,8 +338,13 @@ gomp_affinity_init_level_1 (int level, int this_level, unsigned long count,
|
|||
if (gomp_affinity_add_cpus (pl, first, 1, 0, true))
|
||||
{
|
||||
CPU_CLR_S (first, gomp_cpuset_size, copy);
|
||||
if (level == 1)
|
||||
gomp_places_list_len++;
|
||||
if (level == 1
|
||||
&& ++gomp_places_list_len >= count)
|
||||
{
|
||||
fclose (f);
|
||||
free (line);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (*p == ',')
|
||||
|
|
10
libgomp/testsuite/libgomp.c/places-10.c
Normal file
10
libgomp/testsuite/libgomp.c/places-10.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-set-target-env-var OMP_PLACES "numa_domains(1)" } */
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
omp_display_env (0);
|
||||
return 0;
|
||||
}
|
10
libgomp/testsuite/libgomp.c/places-6.c
Normal file
10
libgomp/testsuite/libgomp.c/places-6.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-set-target-env-var OMP_PLACES "threads(1)" } */
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
omp_display_env (0);
|
||||
return 0;
|
||||
}
|
10
libgomp/testsuite/libgomp.c/places-7.c
Normal file
10
libgomp/testsuite/libgomp.c/places-7.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-set-target-env-var OMP_PLACES "cores(1)" } */
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
omp_display_env (0);
|
||||
return 0;
|
||||
}
|
10
libgomp/testsuite/libgomp.c/places-8.c
Normal file
10
libgomp/testsuite/libgomp.c/places-8.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-set-target-env-var OMP_PLACES "sockets(1)" } */
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
omp_display_env (0);
|
||||
return 0;
|
||||
}
|
10
libgomp/testsuite/libgomp.c/places-9.c
Normal file
10
libgomp/testsuite/libgomp.c/places-9.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-set-target-env-var OMP_PLACES "ll_caches(1)" } */
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
omp_display_env (0);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue