alloc-5.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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_aligned_alloc (sizeof (int), 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_aligned_alloc (2 * sizeof (int), 2 * sizeof (int), omp_default_mem_alloc);
  41. if ((((uintptr_t) p) % (2 * sizeof (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_aligned_alloc (1, 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_aligned_alloc (32, 3072, a);
  56. if ((((uintptr_t) p) % 64) != 0)
  57. abort ();
  58. p[0] = 1;
  59. p[3071 / sizeof (int)] = 2;
  60. if (omp_aligned_alloc (8, 3072, a) != NULL)
  61. abort ();
  62. omp_free (p, a);
  63. p = (int *) omp_aligned_alloc (128, 3072, a);
  64. if ((((uintptr_t) p) % 128) != 0)
  65. abort ();
  66. p[0] = 3;
  67. p[3071 / sizeof (int)] = 4;
  68. omp_free (p, omp_null_allocator);
  69. omp_set_default_allocator (a);
  70. if (omp_get_default_allocator () != a)
  71. abort ();
  72. p = (int *) omp_aligned_alloc (64, 3072, omp_null_allocator);
  73. if (omp_aligned_alloc (8, 3072, omp_null_allocator) != NULL)
  74. abort ();
  75. omp_free (p, a);
  76. omp_destroy_allocator (a);
  77. a = omp_init_allocator (omp_default_mem_space,
  78. sizeof (traits2) / sizeof (traits2[0]),
  79. traits2);
  80. if (a == omp_null_allocator)
  81. abort ();
  82. if (traits3[5].key != omp_atk_fb_data)
  83. abort ();
  84. traits3[5].value = (uintptr_t) a;
  85. a2 = omp_init_allocator (omp_default_mem_space,
  86. sizeof (traits3) / sizeof (traits3[0]),
  87. traits3);
  88. if (a2 == omp_null_allocator)
  89. abort ();
  90. p = (int *) omp_aligned_alloc (4, 420, a2);
  91. if ((((uintptr_t) p) % 32) != 0)
  92. abort ();
  93. p[0] = 5;
  94. p[419 / sizeof (int)] = 6;
  95. q = (int *) omp_aligned_alloc (8, 768, a2);
  96. if ((((uintptr_t) q) % 16) != 0)
  97. abort ();
  98. q[0] = 7;
  99. q[767 / sizeof (int)] = 8;
  100. r = (int *) omp_aligned_alloc (8, 512, a2);
  101. if ((((uintptr_t) r) % 8) != 0)
  102. abort ();
  103. r[0] = 9;
  104. r[511 / sizeof (int)] = 10;
  105. omp_free (p, omp_null_allocator);
  106. omp_free (q, a2);
  107. omp_free (r, omp_null_allocator);
  108. omp_destroy_allocator (a2);
  109. omp_destroy_allocator (a);
  110. a = omp_init_allocator (omp_default_mem_space,
  111. sizeof (traits4) / sizeof (traits4[0]),
  112. traits4);
  113. if (a == omp_null_allocator)
  114. abort ();
  115. if (traits3[5].key != omp_atk_fb_data)
  116. abort ();
  117. traits3[5].value = (uintptr_t) a;
  118. a2 = omp_init_allocator (omp_default_mem_space,
  119. sizeof (traits3) / sizeof (traits3[0]),
  120. traits3);
  121. if (a2 == omp_null_allocator)
  122. abort ();
  123. omp_set_default_allocator (a2);
  124. #ifdef __cplusplus
  125. p = static_cast <int *> (omp_aligned_alloc (4, 420));
  126. #else
  127. p = (int *) omp_aligned_alloc (4, 420, omp_null_allocator);
  128. #endif
  129. if ((((uintptr_t) p) % 32) != 0)
  130. abort ();
  131. p[0] = 5;
  132. p[419 / sizeof (int)] = 6;
  133. q = (int *) omp_aligned_alloc (64, 768, omp_null_allocator);
  134. if ((((uintptr_t) q) % 128) != 0)
  135. abort ();
  136. q[0] = 7;
  137. q[767 / sizeof (int)] = 8;
  138. if (omp_aligned_alloc (8, 768, omp_null_allocator) != NULL)
  139. abort ();
  140. #ifdef __cplusplus
  141. omp_free (p);
  142. omp_free (q);
  143. omp_free (NULL);
  144. #else
  145. omp_free (p, omp_null_allocator);
  146. omp_free (q, omp_null_allocator);
  147. omp_free (NULL, omp_null_allocator);
  148. #endif
  149. omp_free (NULL, omp_null_allocator);
  150. omp_destroy_allocator (a2);
  151. omp_destroy_allocator (a);
  152. return 0;
  153. }