display-affinity-1.c 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* { dg-set-target-env-var OMP_PROC_BIND "spread,close" } */
  2. /* { dg-set-target-env-var OMP_PLACES "cores" } */
  3. /* { dg-set-target-env-var OMP_NUM_THREADS "4" } */
  4. /* { dg-set-target-env-var OMP_AFFINITY_FORMAT "hello" } */
  5. #include <omp.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. int
  9. main ()
  10. {
  11. #define FMT "L:%0.5L%%%n>%32H<!%.33{host}!%.6P_%i_%0.18i_%0.7{ancestor_tnum} %18A"
  12. char buf[] = FMT, hostname[256], buf2[512 + 32], *q;
  13. size_t l, l2, l3;
  14. char *r = getenv ("OMP_AFFINITY_FORMAT");
  15. if (r && strcmp (r, "hello") == 0)
  16. {
  17. if (omp_get_affinity_format (NULL, 0) != 5)
  18. abort ();
  19. if (omp_get_affinity_format (buf2, 3) != 5
  20. || strcmp (buf2, "he") != 0)
  21. abort ();
  22. if (omp_get_affinity_format (buf2, 6) != 5
  23. || strcmp (buf2, "hello") != 0)
  24. abort ();
  25. }
  26. omp_set_affinity_format (buf);
  27. memset (buf, '^', sizeof (buf));
  28. if (omp_get_affinity_format (NULL, 0) != sizeof (buf) - 1)
  29. abort ();
  30. if (omp_get_affinity_format (buf, 3) != sizeof (buf) - 1
  31. || buf[0] != FMT[0] || buf[1] != FMT[1] || buf[2] != '\0')
  32. abort ();
  33. memset (buf, ' ', sizeof (buf));
  34. if (omp_get_affinity_format (buf, sizeof (buf) - 1) != sizeof (buf) - 1
  35. || strncmp (buf, FMT, sizeof (buf) - 2) != 0
  36. || buf[sizeof (buf) - 2] != '\0')
  37. abort ();
  38. memset (buf, '-', sizeof (buf));
  39. if (omp_get_affinity_format (buf, sizeof (buf)) != sizeof (buf) - 1
  40. || strcmp (buf, FMT) != 0)
  41. abort ();
  42. memset (buf, '0', sizeof (buf));
  43. omp_display_affinity (NULL);
  44. omp_display_affinity ("");
  45. omp_display_affinity ("%%%0.9N");
  46. omp_set_affinity_format ("%{host}");
  47. l = omp_capture_affinity (hostname, sizeof hostname, NULL);
  48. if (l < sizeof (hostname))
  49. {
  50. if (strlen (hostname) != l)
  51. abort ();
  52. l2 = omp_capture_affinity (NULL, 0,
  53. "%0.5{nesting_level}%%%32{host}|||%.33H"
  54. "%0.7a%3N!%N!");
  55. if (l2 != (5 + 1 + (l > 32 ? l : 32) + 3 + (l > 33 ? l : 33)
  56. + 7 + 3 + 1 + 1 + 1))
  57. abort ();
  58. omp_set_affinity_format ("%.5L%%%32H|||%.33{host}%0.7{ancestor_tnum}"
  59. "%3{num_threads}!%{num_threads}!");
  60. l3 = omp_capture_affinity (buf2, sizeof buf2, "");
  61. if (l3 != l2)
  62. abort ();
  63. if (memcmp (buf2, " 0%", 5 + 1) != 0)
  64. abort ();
  65. q = buf2 + 6;
  66. if (memcmp (q, hostname, l) != 0)
  67. abort ();
  68. q += l;
  69. if (l < 32)
  70. for (l3 = 32 - l; l3; l3--)
  71. if (*q++ != ' ')
  72. abort ();
  73. if (memcmp (q, "|||", 3) != 0)
  74. abort ();
  75. q += 3;
  76. if (l < 33)
  77. for (l3 = 33 - l; l3; l3--)
  78. if (*q++ != ' ')
  79. abort ();
  80. if (memcmp (q, hostname, l) != 0)
  81. abort ();
  82. q += l;
  83. if (strcmp (q, "-0000011 !1!") != 0)
  84. abort ();
  85. }
  86. #pragma omp parallel num_threads (4) proc_bind(spread)
  87. omp_display_affinity ("%0.2a!%n!%.4L!%N;%.2t;%0.2T;%{team_num};%{num_teams};%A");
  88. return 0;
  89. }