alloc-6.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <omp.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. const omp_alloctrait_t traits[]
  5. = { { omp_atk_alignment, 16 },
  6. { omp_atk_sync_hint, omp_atv_default },
  7. { omp_atk_access, omp_atv_default },
  8. { omp_atk_fallback, omp_atv_default_mem_fb },
  9. { omp_atk_partition, omp_atv_environment } };
  10. int
  11. main ()
  12. {
  13. omp_allocator_handle_t a;
  14. void *p, *q;
  15. volatile size_t large_sz;
  16. a = omp_init_allocator (omp_default_mem_space,
  17. sizeof (traits) / sizeof (traits[0]),
  18. traits);
  19. if (a == omp_null_allocator)
  20. abort ();
  21. p = omp_alloc (2048, a);
  22. if ((((uintptr_t) p) % 16) != 0)
  23. abort ();
  24. large_sz = ~(size_t) 1023;
  25. q = omp_alloc (large_sz, a);
  26. if (q != NULL)
  27. abort ();
  28. q = omp_aligned_alloc (32, large_sz, a);
  29. if (q != NULL)
  30. abort ();
  31. q = omp_calloc (large_sz / 4, 4, a);
  32. if (q != NULL)
  33. abort ();
  34. q = omp_aligned_calloc (1, 2, large_sz / 2, a);
  35. if (q != NULL)
  36. abort ();
  37. omp_free (p, a);
  38. large_sz = ~(size_t) 0;
  39. large_sz >>= 1;
  40. large_sz += 1;
  41. if (omp_calloc (2, large_sz, a) != NULL)
  42. abort ();
  43. if (omp_calloc (large_sz, 1024, a) != NULL)
  44. abort ();
  45. if (omp_calloc (large_sz, large_sz, a) != NULL)
  46. abort ();
  47. if (omp_aligned_calloc (16, 2, large_sz, a) != NULL)
  48. abort ();
  49. if (omp_aligned_calloc (32, large_sz, 1024, a) != NULL)
  50. abort ();
  51. if (omp_aligned_calloc (64, large_sz, large_sz, a) != NULL)
  52. abort ();
  53. omp_destroy_allocator (a);
  54. return 0;
  55. }