alloc-1.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #include <omp.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. const omp_alloctrait_t traits2[]
  5. = { { omp_atk_alignment, 16 },
  6. { omp_atk_sync_hint, omp_atv_default },
  7. { omp_atk_access, omp_atv_default },
  8. { omp_atk_pool_size, 1024 },
  9. { omp_atk_fallback, omp_atv_default_mem_fb },
  10. { omp_atk_partition, omp_atv_environment } };
  11. omp_alloctrait_t traits3[]
  12. = { { omp_atk_sync_hint, omp_atv_uncontended },
  13. { omp_atk_alignment, 32 },
  14. { omp_atk_access, omp_atv_all },
  15. { omp_atk_pool_size, 512 },
  16. { omp_atk_fallback, omp_atv_allocator_fb },
  17. { omp_atk_fb_data, 0 },
  18. { omp_atk_partition, omp_atv_default } };
  19. const omp_alloctrait_t traits4[]
  20. = { { omp_atk_alignment, 128 },
  21. { omp_atk_pool_size, 1024 },
  22. { omp_atk_fallback, omp_atv_null_fb } };
  23. int
  24. main ()
  25. {
  26. int *volatile p = (int *) omp_alloc (3 * sizeof (int), omp_default_mem_alloc);
  27. int *volatile q;
  28. int *volatile r;
  29. omp_alloctrait_t traits[3]
  30. = { { omp_atk_alignment, 64 },
  31. { omp_atk_fallback, omp_atv_null_fb },
  32. { omp_atk_pool_size, 4096 } };
  33. omp_allocator_handle_t a, a2;
  34. if ((((uintptr_t) p) % __alignof (int)) != 0)
  35. abort ();
  36. p[0] = 1;
  37. p[1] = 2;
  38. p[2] = 3;
  39. omp_free (p, omp_default_mem_alloc);
  40. p = (int *) omp_alloc (2 * sizeof (int), omp_default_mem_alloc);
  41. if ((((uintptr_t) p) % __alignof (int)) != 0)
  42. abort ();
  43. p[0] = 1;
  44. p[1] = 2;
  45. omp_free (p, omp_null_allocator);
  46. omp_set_default_allocator (omp_default_mem_alloc);
  47. p = (int *) omp_alloc (sizeof (int), omp_null_allocator);
  48. if ((((uintptr_t) p) % __alignof (int)) != 0)
  49. abort ();
  50. p[0] = 3;
  51. omp_free (p, omp_get_default_allocator ());
  52. a = omp_init_allocator (omp_default_mem_space, 3, traits);
  53. if (a == omp_null_allocator)
  54. abort ();
  55. p = (int *) omp_alloc (3072, a);
  56. if ((((uintptr_t) p) % 64) != 0)
  57. abort ();
  58. p[0] = 1;
  59. p[3071 / sizeof (int)] = 2;
  60. if (omp_alloc (3072, a) != NULL)
  61. abort ();
  62. omp_free (p, a);
  63. p = (int *) omp_alloc (3072, a);
  64. p[0] = 3;
  65. p[3071 / sizeof (int)] = 4;
  66. omp_free (p, omp_null_allocator);
  67. omp_set_default_allocator (a);
  68. if (omp_get_default_allocator () != a)
  69. abort ();
  70. p = (int *) omp_alloc (3072, omp_null_allocator);
  71. if (omp_alloc (3072, omp_null_allocator) != NULL)
  72. abort ();
  73. omp_free (p, a);
  74. omp_destroy_allocator (a);
  75. a = omp_init_allocator (omp_default_mem_space,
  76. sizeof (traits2) / sizeof (traits2[0]),
  77. traits2);
  78. if (a == omp_null_allocator)
  79. abort ();
  80. if (traits3[5].key != omp_atk_fb_data)
  81. abort ();
  82. traits3[5].value = (uintptr_t) a;
  83. a2 = omp_init_allocator (omp_default_mem_space,
  84. sizeof (traits3) / sizeof (traits3[0]),
  85. traits3);
  86. if (a2 == omp_null_allocator)
  87. abort ();
  88. p = (int *) omp_alloc (420, a2);
  89. if ((((uintptr_t) p) % 32) != 0)
  90. abort ();
  91. p[0] = 5;
  92. p[419 / sizeof (int)] = 6;
  93. q = (int *) omp_alloc (768, a2);
  94. if ((((uintptr_t) q) % 16) != 0)
  95. abort ();
  96. q[0] = 7;
  97. q[767 / sizeof (int)] = 8;
  98. r = (int *) omp_alloc (512, a2);
  99. if ((((uintptr_t) r) % __alignof (int)) != 0)
  100. abort ();
  101. r[0] = 9;
  102. r[511 / sizeof (int)] = 10;
  103. omp_free (p, omp_null_allocator);
  104. omp_free (q, a2);
  105. omp_free (r, omp_null_allocator);
  106. omp_destroy_allocator (a2);
  107. omp_destroy_allocator (a);
  108. a = omp_init_allocator (omp_default_mem_space,
  109. sizeof (traits4) / sizeof (traits4[0]),
  110. traits4);
  111. if (a == omp_null_allocator)
  112. abort ();
  113. if (traits3[5].key != omp_atk_fb_data)
  114. abort ();
  115. traits3[5].value = (uintptr_t) a;
  116. a2 = omp_init_allocator (omp_default_mem_space,
  117. sizeof (traits3) / sizeof (traits3[0]),
  118. traits3);
  119. if (a2 == omp_null_allocator)
  120. abort ();
  121. omp_set_default_allocator (a2);
  122. #ifdef __cplusplus
  123. p = static_cast <int *> (omp_alloc (420));
  124. #else
  125. p = (int *) omp_alloc (420, omp_null_allocator);
  126. #endif
  127. if ((((uintptr_t) p) % 32) != 0)
  128. abort ();
  129. p[0] = 5;
  130. p[419 / sizeof (int)] = 6;
  131. q = (int *) omp_alloc (768, omp_null_allocator);
  132. if ((((uintptr_t) q) % 128) != 0)
  133. abort ();
  134. q[0] = 7;
  135. q[767 / sizeof (int)] = 8;
  136. if (omp_alloc (768, omp_null_allocator) != NULL)
  137. abort ();
  138. #ifdef __cplusplus
  139. omp_free (p);
  140. omp_free (q);
  141. omp_free (NULL);
  142. #else
  143. omp_free (p, omp_null_allocator);
  144. omp_free (q, omp_null_allocator);
  145. omp_free (NULL, omp_null_allocator);
  146. #endif
  147. omp_free (NULL, omp_null_allocator);
  148. omp_destroy_allocator (a2);
  149. omp_destroy_allocator (a);
  150. return 0;
  151. }