diff --git a/drama/src/rev-mc.c b/drama/src/rev-mc.c index 473740f..e3567cc 100644 --- a/drama/src/rev-mc.c +++ b/drama/src/rev-mc.c @@ -266,7 +266,8 @@ find_row_mask(std::vector &sets, std::vector fn_masks, mem_buff_t mem, uint64_t threshold, - uint64_t flags) + uint64_t flags, + uint64_t cpu) { addr_tuple base_addr = gen_addr_tuple(get_rnd_addr(mem.buffer, mem.size, 0)); @@ -326,12 +327,13 @@ find_row_mask(std::vector &sets, // } std::vector workers; - auto thread_num = std::thread::hardware_concurrency(); + auto thread_num = cpu == 0 ? std::thread::hardware_concurrency() : cpu; if (thread_num > 2) { thread_num -= 2; } uint64_t step = 0; for (uint64_t i = row_mask; i < last_mask; ++step) { i = next_bit_permutation(i); } step /= thread_num; if (!step) { ++step; } + fprintf(stderr, "thread_num: %ld", thread_num); for (int i = 0; i < thread_num; ++i) { workers.emplace_back([&] { @@ -450,7 +452,7 @@ rev_mc(size_t sets_cnt, size_t threshold, size_t rounds, size_t m_size, char *o_ fprintf(stderr, "Start Find Function\n"); fn_masks = find_functions(sets, 6, 30, flags); fprintf(stderr, "Start Find RowMask\n"); - uint64_t row_mask = find_row_mask(sets, fn_masks, mem, threshold, flags); + uint64_t row_mask = find_row_mask(sets, fn_masks, mem, threshold, flags, cpu); free_buffer(&mem); }