size_t test_global_to_local_ids(unsigned num_ids, unsigned capacity, unsigned num_find_iterations) { typedef Device execution_space; typedef typename execution_space::size_type size_type; typedef Kokkos::View<uint32_t*,execution_space> local_id_view; typedef Kokkos::UnorderedMap<uint32_t,size_type,execution_space> global_id_view; double elasped_time = 0; Kokkos::Impl::Timer timer; local_id_view local_2_global("local_ids", num_ids); global_id_view global_2_local(capacity); int shiftw = 15; //create elasped_time = timer.seconds(); std::cout << std::setw(shiftw) << "allocate: " << elasped_time << std::endl; timer.reset(); // generate unique ids { generate_ids<Device> gen(local_2_global); } // generate elasped_time = timer.seconds(); std::cout << std::setw(shiftw) << "generate: " << elasped_time << std::endl; timer.reset(); { fill_map<Device> fill(global_2_local, local_2_global); } // fill elasped_time = timer.seconds(); std::cout << std::setw(shiftw) << "fill: " << elasped_time << std::endl; timer.reset(); size_t num_errors = global_2_local.failed_insert(); if (num_errors == 0u) { for (unsigned i=0; i<num_find_iterations; ++i) { find_test<Device> find(global_2_local, local_2_global,num_errors); } // find elasped_time = timer.seconds(); std::cout << std::setw(shiftw) << "lookup: " << elasped_time << std::endl; } else { std::cout << " !!! Fill Failed !!!" << std::endl; } return num_errors; }
void test_global_to_local_ids(unsigned num_ids) { typedef Device device_type; typedef typename device_type::size_type size_type; typedef Kokkos::View<uint32_t*,device_type> local_id_view; typedef Kokkos::UnorderedMap<uint32_t,size_type,device_type> global_id_view; //size std::cout << num_ids << ", "; double elasped_time = 0; Kokkos::Impl::Timer timer; local_id_view local_2_global("local_ids", num_ids); global_id_view global_2_local((3u*num_ids)/2u); //create elasped_time = timer.seconds(); std::cout << elasped_time << ", "; timer.reset(); // generate unique ids { generate_ids<Device> gen(local_2_global); } Device::fence(); // generate elasped_time = timer.seconds(); std::cout << elasped_time << ", "; timer.reset(); { fill_map<Device> fill(global_2_local, local_2_global); } Device::fence(); // fill elasped_time = timer.seconds(); std::cout << elasped_time << ", "; timer.reset(); size_t num_errors = 0; for (int i=0; i<100; ++i) { find_test<Device> find(global_2_local, local_2_global,num_errors); } Device::fence(); // find elasped_time = timer.seconds(); std::cout << elasped_time << std::endl; ASSERT_EQ( num_errors, 0u); }