| 48 | } |
| 49 | |
| 50 | TEST_F(GetArenaTest, test_TC_MEMKIND_ThreadHash) |
| 51 | { |
| 52 | int num_threads = omp_get_max_threads(); |
| 53 | std::vector<unsigned int> arena_idx(num_threads); |
| 54 | unsigned int thread_idx, idx; |
| 55 | int err = 0; |
| 56 | size_t size = 0; |
| 57 | int i; |
| 58 | unsigned max_collisions, collisions; |
| 59 | const unsigned collisions_limit = 5; |
| 60 | |
| 61 | //Initialize kind |
| 62 | memkind_malloc(MEMKIND_HBW, 0); |
| 63 | |
| 64 | #pragma omp parallel shared(arena_idx) private(thread_idx) |
| 65 | { |
| 66 | thread_idx = omp_get_thread_num(); |
| 67 | err = memkind_thread_get_arena(MEMKIND_HBW, &(arena_idx[thread_idx]), size); |
| 68 | } |
| 69 | ASSERT_TRUE(err == 0); |
| 70 | std::sort(arena_idx.begin(), arena_idx.end(), uint_comp); |
| 71 | idx = arena_idx[0]; |
| 72 | collisions = 0; |
| 73 | max_collisions = 0; |
| 74 | for (i = 1; i < num_threads; ++i) { |
| 75 | if (arena_idx[i] == idx) { |
| 76 | collisions++; |
| 77 | } else { |
| 78 | if (collisions > max_collisions) { |
| 79 | max_collisions = collisions; |
| 80 | } |
| 81 | idx = arena_idx[i]; |
| 82 | collisions = 0; |
| 83 | } |
| 84 | } |
| 85 | EXPECT_LE(max_collisions, collisions_limit); |
| 86 | RecordProperty("max_collisions", max_collisions); |
| 87 | } |
nothing calls this directly
no test coverage detected