SpaceSearcher(TIter t_begin, TIter t_end, T2Point t2p) : mc_(), c2t_(), t2p_(t2p) { // For performance checks CS207::Clock clock; clock.start(); // Determine pmin and pmax, i.e., the minimum and maximum corners // for the bounding box. Point pmin = t2p_(*t_begin); Point pmax = pmin; for (auto it = t_begin; it != t_end; ++it) { Point p = t2p_(*it); for (int i = 0; i < 3; ++i) { if (p[i] < pmin[i]) pmin[i] = p[i]; else if (p[i] > pmax[i]) pmax[i] = p[i]; } } // Create MortonCoder instance. bounding_box_ = BoundingBox(pmin, pmax); mc_ = MortonCoderType(bounding_box_); // Map Morton codes to data items. c2t_.clear(); c2t_.resize(mc_.end_code); for (auto it = t_begin; it != t_end; ++it) { Point p = t2p_(*it); c2t_[mc_.code(p)].push_back(*it); } // Uncomment to print some info #if 0 size_type item_count = 0; size_type max_items = 0; for (auto it = c2t_.begin(); it != c2t_.end(); ++it) { auto& items = *it; item_count += items.size(); if (items.size() > max_items) max_items = items.size(); } std::cout << "Construction time: " << clock.seconds() << " seconds.\n"; std::cout << "Total number of elements = " << item_count << std::endl; std::cout << "Total number of cells = " << mc_.end_code << std::endl; std::cout << "Max. number of elements per cell = " << max_items << std::endl; std::cout << std::endl; #endif }
int main() { CS207::Clock timer; unsigned N = 512; Matrix A(N, N, 1.23); Matrix B(N, N, 2); Matrix C(N, N, 5.76); double alpha = 3.14; // Print out the type information of M std::cout << "Type of Expr:\n " << 2.73*(A*B) + alpha*(alpha*A + B + A(0,0)*C) << std::endl; timer.start(); Matrix D = 2.73*(A*B) + alpha*(alpha*A + B + A(0,0)*C); double eval_time = timer.seconds(); std::cout << "Compute Time: " << eval_time << " seconds" << std::endl; }