int main(int argc, char* argv[]){ arg_t arg; parse_arg(arg, argc, argv); std::cout << "[INFO ] Creating column ..." << std::endl; Column* column = new Column(arg.coltype, arg.nbits, arg.size); std::cout << "[INFO ] Creating bit vector ..." << std::endl; BitVector* bitvector = new BitVector(column); std::cout << "[INFO ] Populating column with random values ..." << std::endl; auto dice = std::bind(std::uniform_int_distribution<WordUnit>( std::numeric_limits<WordUnit>::min(), std::numeric_limits<WordUnit>::max()), std::default_random_engine(std::time(0))); WordUnit mask = (1ULL << arg.nbits) - 1; for(size_t i=0; i < arg.size; i++){ column->SetTuple(i, dice() & mask); } std::cout << "[INFO ] omp_max_threads = " << omp_get_max_threads() << std::endl; std::cout << "[INFO ] Executing scan ..." << std::endl; HybridTimer t1; t1.Start(); for(size_t r = 0; r < arg.repeat; r++){ column->Scan(Comparator::kLess, static_cast<WordUnit>(mask*arg.selectivity), bitvector, Bitwise::kSet); } t1.Stop(); std::cout << "Wall time (sec), CPU cost (cycle/value)" << std::endl; std::cout << t1.GetSeconds()/arg.repeat << ", " << double(t1.GetNumCycles()/arg.repeat)/arg.size << std::endl; std::cout << "[INFO ] Releasing memory ..." << std::endl; delete column; delete bitvector; }