void Router::cb_stats () { if (1) { Crossbar c_b(I, O, flit_size); c_b.compute_power(); crossbar.delay = c_b.delay; crossbar.power.readOp.dynamic = c_b.power.readOp.dynamic; crossbar.power.readOp.leakage = c_b.power.readOp.leakage; crossbar.power.readOp.gate_leakage = c_b.power.readOp.gate_leakage; crossbar.area = c_b.area; } else { crossbar.power.readOp.dynamic = tr_crossbar_power(); crossbar.power.readOp.leakage = flit_size * I * O * cmos_Isub_leakage(NTtr*g_tp.min_w_nmos_, PTtr*min_w_pmos, 1, tg); crossbar.power.readOp.gate_leakage = flit_size * I * O * cmos_Ig_leakage(NTtr*g_tp.min_w_nmos_, PTtr*min_w_pmos, 1, tg); } }
/* * === FUNCTION ====================================================================== * Name: main * Description: * ===================================================================================== */ int main(int argc, char *argv[]) { a_b(); c_b(); return EXIT_SUCCESS; } /* ---------- end of function main ---------- */
void Solver::make_problem_pb() { if (problem_discrete == 0) throw logic_error("Discrete problem doesn't exist."); if (problem_pb != 0) delete problem_pb; problem_pb = new Problem(); // clear variables mapping vars_mapping.clear(); // add variables for (size_t i = 0, index = 0; i < Problem::VARS_GROUPS_TOTAL; ++i) { Problem::Vars_group group = Problem::Vars_group(i); for (size_t j = 0; j < problem_discrete->get_variables_num(group); ++j) { Variable& v_d = problem_discrete->get_variable(group, j); real_t lower_bound = v_d.get_lower_bound(); real_t upper_bound = v_d.get_upper_bound(); size_t num = size_t(floor(log(upper_bound.get_d() - lower_bound.get_d()) / log(2)) + 1); for (size_t k = 0; k < num; ++k, ++index) { ostringstream stream; stream << k; string name; if (group == Problem::VARS_NEXT_STATE) { name = v_d.get_name(); name.erase(name.end() - 1); name += "_" + stream.str() + "'"; } else name = v_d.get_name() + "_" + stream.str(); Variable v_b(name, Variable::INTEGER, 0, 1); problem_pb->add_variable(group, v_b); vars_mapping[v_d.get_name()].push_back(name); } } } // add constraints for (size_t i = 0; i < Problem::CONSTRS_GROUPS_TOTAL; ++i) { Problem::Constrs_group group = Problem::Constrs_group(i); for (size_t j = 0; j < problem_discrete->get_constraints_num(group); ++j) { Constraint& c_d = problem_discrete->get_constraint(group, j); Constraint c_b(c_d.get_type()); real_t free_member = 0; for (size_t k = 0; k < problem_discrete->get_constraints_vars_num(group); ++k) { Variable& v_d = problem_discrete->get_constraints_var(group, k); real_t coeff = c_d.get_coeff(v_d); if (coeff != 0) { for (size_t w = 0; w < vars_mapping[v_d.get_name()].size(); ++w) { string& name = vars_mapping[v_d.get_name()][w]; c_b.set_coeff(name, coeff * pow(2.0f, w)); } free_member += coeff * v_d.get_lower_bound(); } } free_member += c_d.get_free_member(); c_b.set_free_member(free_member); problem_pb->add_constraint(group, c_b); } } }