123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /* { dg-do run } */
- /* { dg-set-target-env-var OMP_PROC_BIND "spread,close" } */
- /* { dg-set-target-env-var OMP_PLACES "{6,7}:4:-2,!{2,3}" } */
- /* { dg-set-target-env-var OMP_NUM_THREADS "2" } */
- /* { dg-additional-options "-Wno-deprecated-declarations" } */
- #include <omp.h>
- #include <stdlib.h>
- #include <stdio.h>
- int *
- get_buf (int nump)
- {
- static int *buf;
- static size_t buf_size;
- if ((size_t) nump > buf_size)
- {
- buf_size *= 2;
- if (nump > buf_size)
- buf_size = nump + 64;
- int *bufn = realloc (buf, buf_size * sizeof (int));
- if (bufn == NULL)
- {
- fprintf (stderr, "memory allocation error\n");
- exit (1);
- }
- buf = bufn;
- }
- return buf;
- }
- void
- print_place (int count, int *ids)
- {
- int i, j;
- printf ("{");
- for (i = 0; i < count; i++)
- {
- for (j = i + 1; j < count; j++)
- if (ids[j] != ids[i] + (j - i))
- break;
- if (i)
- printf (",");
- if (j == i + 1)
- printf ("%d", ids[i]);
- else
- {
- printf ("%d:%d", ids[i], j - i);
- i = j - 1;
- }
- }
- printf ("}\n");
- }
- void
- print_place_var (void)
- {
- int place = omp_get_place_num ();
- int num_places = omp_get_partition_num_places ();
- int *ids = get_buf (num_places);
- omp_get_partition_place_nums (ids);
- printf ("place %d\n", place);
- if (num_places)
- printf ("partition %d-%d\n", ids[0], ids[num_places - 1]);
- }
- int
- main ()
- {
- int i, num = omp_get_num_places (), nump, *ids;
- printf ("omp_get_num_places () == %d\n", num);
- for (i = 0; i < num; i++)
- {
- printf ("place %d ", i);
- nump = omp_get_place_num_procs (i);
- ids = get_buf (nump);
- omp_get_place_proc_ids (i, ids);
- print_place (nump, ids);
- }
- print_place_var ();
- omp_set_nested (1);
- #pragma omp parallel
- if (omp_get_thread_num () == omp_get_num_threads () - 1)
- {
- #pragma omp parallel
- if (omp_get_thread_num () == omp_get_num_threads () - 1)
- print_place_var ();
- }
- return 0;
- }
|