int main() { pthread_condattr_t attr; int rc; puts( "*** POSIX Condition Variable Default Attributes Report ***" ); rc = pthread_condattr_init( &attr ); assert( rc == 0 ); print_shared( &attr ); print_clock( &attr ); puts( "*** END OF POSIX Condition Variable Default Attributes Report ***" ); exit( 0 ); }
static int print_clock_info(struct pci_device *pci_dev) { uint32_t devid = pci_dev->device_id; uint16_t gcfgc; if (IS_GM45(devid)) { int core_clock = -1; pci_device_cfg_read_u16(pci_dev, &gcfgc, I915_GCFGC); switch (gcfgc & 0xf) { case 8: core_clock = 266; break; case 9: core_clock = 320; break; case 11: core_clock = 400; break; case 13: core_clock = 533; break; } print_clock("core", core_clock); } else if (IS_965(devid) && IS_MOBILE(devid)) { int render_clock = -1, sampler_clock = -1; pci_device_cfg_read_u16(pci_dev, &gcfgc, I915_GCFGC); switch (gcfgc & 0xf) { case 2: render_clock = 250; sampler_clock = 267; break; case 3: render_clock = 320; sampler_clock = 333; break; case 4: render_clock = 400; sampler_clock = 444; break; case 5: render_clock = 500; sampler_clock = 533; break; } print_clock("render", render_clock); printf(" "); print_clock("sampler", sampler_clock); } else if (IS_945(devid) && IS_MOBILE(devid)) { int render_clock = -1, display_clock = -1; pci_device_cfg_read_u16(pci_dev, &gcfgc, I915_GCFGC); switch (gcfgc & 0x7) { case 0: render_clock = 166; break; case 1: render_clock = 200; break; case 3: render_clock = 250; break; case 5: render_clock = 400; break; } switch (gcfgc & 0x70) { case 0: display_clock = 200; break; case 4: display_clock = 320; break; } if (gcfgc & (1 << 7)) display_clock = 133; print_clock("render", render_clock); printf(" "); print_clock("display", display_clock); } else if (IS_915(devid) && IS_MOBILE(devid)) { int render_clock = -1, display_clock = -1; pci_device_cfg_read_u16(pci_dev, &gcfgc, I915_GCFGC); switch (gcfgc & 0x7) { case 0: render_clock = 160; break; case 1: render_clock = 190; break; case 4: render_clock = 333; break; } if (gcfgc & (1 << 13)) render_clock = 133; switch (gcfgc & 0x70) { case 0: display_clock = 190; break; case 4: display_clock = 333; break; } if (gcfgc & (1 << 7)) display_clock = 133; print_clock("render", render_clock); printf(" "); print_clock("display", display_clock); } printf("\n"); return -1; }
static int solve_with_simplex(ppl_const_Constraint_System_t cs, ppl_const_Linear_Expression_t objective, ppl_Coefficient_t optimum_n, ppl_Coefficient_t optimum_d, ppl_Generator_t point) { ppl_MIP_Problem_t ppl_mip; int optimum_found = 0; int pricing = 0; int status = 0; int satisfiable = 0; ppl_dimension_type space_dim; ppl_const_Constraint_t c; ppl_const_Generator_t g; ppl_Constraint_System_const_iterator_t i; ppl_Constraint_System_const_iterator_t iend; int counter; int mode = maximize ? PPL_OPTIMIZATION_MODE_MAXIMIZATION : PPL_OPTIMIZATION_MODE_MINIMIZATION; ppl_Constraint_System_space_dimension(cs, &space_dim); ppl_new_MIP_Problem_from_space_dimension(&ppl_mip, space_dim); switch (pricing_method) { case 0: pricing = PPL_MIP_PROBLEM_CONTROL_PARAMETER_PRICING_STEEPEST_EDGE_FLOAT; break; case 1: pricing = PPL_MIP_PROBLEM_CONTROL_PARAMETER_PRICING_STEEPEST_EDGE_EXACT; break; case 2: pricing = PPL_MIP_PROBLEM_CONTROL_PARAMETER_PRICING_TEXTBOOK; break; default: fatal("ppl_lpsol internal error"); } ppl_MIP_Problem_set_control_parameter(ppl_mip, pricing); ppl_MIP_Problem_set_objective_function(ppl_mip, objective); ppl_MIP_Problem_set_optimization_mode(ppl_mip, mode); if (!no_mip) ppl_MIP_Problem_add_to_integer_space_dimensions(ppl_mip, integer_variables, glpk_lp_num_int); if (incremental) { /* Add the constraints of `cs' one at a time. */ ppl_new_Constraint_System_const_iterator(&i); ppl_new_Constraint_System_const_iterator(&iend); ppl_Constraint_System_begin(cs, i); ppl_Constraint_System_end(cs, iend); counter = 0; while (!ppl_Constraint_System_const_iterator_equal_test(i, iend)) { ++counter; if (verbosity >= 4) fprintf(output_file, "\nSolving constraint %d\n", counter); ppl_Constraint_System_const_iterator_dereference(i, &c); ppl_MIP_Problem_add_constraint(ppl_mip, c); if (no_optimization) { satisfiable = ppl_MIP_Problem_is_satisfiable(ppl_mip); if (!satisfiable) break; } else status = ppl_MIP_Problem_solve(ppl_mip); ppl_Constraint_System_const_iterator_increment(i); } ppl_delete_Constraint_System_const_iterator(i); ppl_delete_Constraint_System_const_iterator(iend); } else { ppl_MIP_Problem_add_constraints(ppl_mip, cs); if (no_optimization) satisfiable = ppl_MIP_Problem_is_satisfiable(ppl_mip); else status = ppl_MIP_Problem_solve(ppl_mip); } #ifdef PPL_LPSOL_SUPPORTS_TIMINGS if (print_timings) { fprintf(stderr, "Time to solve the problem: "); print_clock(stderr); fprintf(stderr, " s\n"); start_clock(); } #endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */ if ((no_optimization && !satisfiable) || (!no_optimization && status == PPL_MIP_PROBLEM_STATUS_UNFEASIBLE)) { if (verbosity >= 1) fprintf(output_file, "Unfeasible problem.\n"); maybe_check_results(status, 0.0); goto exit; } else if (no_optimization && satisfiable) { if (verbosity >= 1) fprintf(output_file, "Feasible problem.\n"); /* Kludge: let's pass PPL_MIP_PROBLEM_STATUS_OPTIMIZED, to let work `maybe_check_results'. */ maybe_check_results(PPL_MIP_PROBLEM_STATUS_OPTIMIZED, 0.0); goto exit; } else if (status == PPL_MIP_PROBLEM_STATUS_UNBOUNDED) { if (verbosity >= 1) fprintf(output_file, "Unbounded problem.\n"); maybe_check_results(status, 0.0); goto exit; } else if (status == PPL_MIP_PROBLEM_STATUS_OPTIMIZED) { ppl_MIP_Problem_optimal_value(ppl_mip, optimum_n, optimum_d); ppl_MIP_Problem_optimizing_point(ppl_mip, &g); ppl_assign_Generator_from_Generator(point, g); optimum_found = 1; goto exit; } else fatal("internal error"); exit: ppl_delete_MIP_Problem(ppl_mip); return optimum_found; }
static int solve_with_generators(ppl_Constraint_System_t ppl_cs, ppl_const_Linear_Expression_t ppl_objective_le, ppl_Coefficient_t optimum_n, ppl_Coefficient_t optimum_d, ppl_Generator_t point) { ppl_Polyhedron_t ppl_ph; int optimum_found = 0; int empty; int unbounded; int included; /* Create the polyhedron (recycling the data structures of ppl_cs). */ ppl_new_C_Polyhedron_recycle_Constraint_System(&ppl_ph, ppl_cs); #ifdef PPL_LPSOL_SUPPORTS_TIMINGS if (print_timings) { fprintf(stderr, "Time to create a PPL polyhedron: "); print_clock(stderr); fprintf(stderr, " s\n"); start_clock(); } #endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */ empty = ppl_Polyhedron_is_empty(ppl_ph); #ifdef PPL_LPSOL_SUPPORTS_TIMINGS if (print_timings) { fprintf(stderr, "Time to check for emptiness: "); print_clock(stderr); fprintf(stderr, " s\n"); start_clock(); } #endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */ if (empty) { if (verbosity >= 1) fprintf(output_file, "Unfeasible problem.\n"); maybe_check_results(PPL_MIP_PROBLEM_STATUS_UNFEASIBLE, 0.0); goto exit; } if (!empty && no_optimization) { if (verbosity >= 1) fprintf(output_file, "Feasible problem.\n"); /* Kludge: let's pass PPL_MIP_PROBLEM_STATUS_OPTIMIZED, to let work `maybe_check_results'. */ maybe_check_results(PPL_MIP_PROBLEM_STATUS_OPTIMIZED, 0.0); goto exit; } /* Check whether the problem is unbounded. */ unbounded = maximize ? !ppl_Polyhedron_bounds_from_above(ppl_ph, ppl_objective_le) : !ppl_Polyhedron_bounds_from_below(ppl_ph, ppl_objective_le); #ifdef PPL_LPSOL_SUPPORTS_TIMINGS if (print_timings) { fprintf(stderr, "Time to check for unboundedness: "); print_clock(stderr); fprintf(stderr, " s\n"); start_clock(); } #endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */ if (unbounded) { if (verbosity >= 1) fprintf(output_file, "Unbounded problem.\n"); maybe_check_results(PPL_MIP_PROBLEM_STATUS_UNBOUNDED, 0.0); goto exit; } optimum_found = maximize ? ppl_Polyhedron_maximize_with_point(ppl_ph, ppl_objective_le, optimum_n, optimum_d, &included, point) : ppl_Polyhedron_minimize_with_point(ppl_ph, ppl_objective_le, optimum_n, optimum_d, &included, point); #ifdef PPL_LPSOL_SUPPORTS_TIMINGS if (print_timings) { fprintf(stderr, "Time to find the optimum: "); print_clock(stderr); fprintf(stderr, " s\n"); start_clock(); } #endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */ if (!optimum_found) fatal("internal error"); if (!included) fatal("internal error"); exit: ppl_delete_Polyhedron(ppl_ph); return optimum_found; }
static void solve(char* file_name) { ppl_Constraint_System_t ppl_cs; #ifndef NDEBUG ppl_Constraint_System_t ppl_cs_copy; #endif ppl_Generator_t optimum_location; ppl_Linear_Expression_t ppl_le; int dimension, row, num_rows, column, nz, i, j, type; int* coefficient_index; double lb, ub; double* coefficient_value; mpq_t rational_lb, rational_ub; mpq_t* rational_coefficient; mpq_t* objective; ppl_Linear_Expression_t ppl_objective_le; ppl_Coefficient_t optimum_n; ppl_Coefficient_t optimum_d; mpq_t optimum; mpz_t den_lcm; int optimum_found; glp_mpscp glpk_mpscp; glpk_lp = glp_create_prob(); glp_init_mpscp(&glpk_mpscp); if (verbosity == 0) { /* FIXME: find a way to suppress output from glp_read_mps. */ } #ifdef PPL_LPSOL_SUPPORTS_TIMINGS if (print_timings) start_clock(); #endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */ if (glp_read_mps(glpk_lp, GLP_MPS_FILE, &glpk_mpscp, file_name) != 0) fatal("cannot read MPS file `%s'", file_name); #ifdef PPL_LPSOL_SUPPORTS_TIMINGS if (print_timings) { fprintf(stderr, "Time to read the input file: "); print_clock(stderr); fprintf(stderr, " s\n"); start_clock(); } #endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */ glpk_lp_num_int = glp_get_num_int(glpk_lp); if (glpk_lp_num_int > 0 && !no_mip && !use_simplex) fatal("the enumeration solving method can not handle MIP problems"); dimension = glp_get_num_cols(glpk_lp); /* Read variables constrained to be integer. */ if (glpk_lp_num_int > 0 && !no_mip && use_simplex) { if (verbosity >= 4) fprintf(output_file, "Integer variables:\n"); integer_variables = (ppl_dimension_type*) malloc((glpk_lp_num_int + 1)*sizeof(ppl_dimension_type)); for (i = 0, j = 0; i < dimension; ++i) { int col_kind = glp_get_col_kind(glpk_lp, i+1); if (col_kind == GLP_IV || col_kind == GLP_BV) { integer_variables[j] = i; if (verbosity >= 4) { ppl_io_fprint_variable(output_file, i); fprintf(output_file, " "); } ++j; } } } coefficient_index = (int*) malloc((dimension+1)*sizeof(int)); coefficient_value = (double*) malloc((dimension+1)*sizeof(double)); rational_coefficient = (mpq_t*) malloc((dimension+1)*sizeof(mpq_t)); ppl_new_Constraint_System(&ppl_cs); mpq_init(rational_lb); mpq_init(rational_ub); for (i = 1; i <= dimension; ++i) mpq_init(rational_coefficient[i]); mpz_init(den_lcm); if (verbosity >= 4) fprintf(output_file, "\nConstraints:\n"); /* Set up the row (ordinary) constraints. */ num_rows = glp_get_num_rows(glpk_lp); for (row = 1; row <= num_rows; ++row) { /* Initialize the least common multiple computation. */ mpz_set_si(den_lcm, 1); /* Set `nz' to the number of non-zero coefficients. */ nz = glp_get_mat_row(glpk_lp, row, coefficient_index, coefficient_value); for (i = 1; i <= nz; ++i) { set_mpq_t_from_double(rational_coefficient[i], coefficient_value[i]); /* Update den_lcm. */ mpz_lcm(den_lcm, den_lcm, mpq_denref(rational_coefficient[i])); } lb = glp_get_row_lb(glpk_lp, row); ub = glp_get_row_ub(glpk_lp, row); set_mpq_t_from_double(rational_lb, lb); set_mpq_t_from_double(rational_ub, ub); mpz_lcm(den_lcm, den_lcm, mpq_denref(rational_lb)); mpz_lcm(den_lcm, den_lcm, mpq_denref(rational_ub)); ppl_new_Linear_Expression_with_dimension(&ppl_le, dimension); for (i = 1; i <= nz; ++i) { mpz_mul(tmp_z, den_lcm, mpq_numref(rational_coefficient[i])); mpz_divexact(tmp_z, tmp_z, mpq_denref(rational_coefficient[i])); ppl_assign_Coefficient_from_mpz_t(ppl_coeff, tmp_z); ppl_Linear_Expression_add_to_coefficient(ppl_le, coefficient_index[i]-1, ppl_coeff); } type = glp_get_row_type(glpk_lp, row); add_constraints(ppl_le, type, rational_lb, rational_ub, den_lcm, ppl_cs); ppl_delete_Linear_Expression(ppl_le); } free(coefficient_value); for (i = 1; i <= dimension; ++i) mpq_clear(rational_coefficient[i]); free(rational_coefficient); free(coefficient_index); #ifndef NDEBUG ppl_new_Constraint_System_from_Constraint_System(&ppl_cs_copy, ppl_cs); #endif /* FIXME: here we could build the polyhedron and minimize it before adding the variable bounds. */ /* Set up the columns constraints, i.e., variable bounds. */ for (column = 1; column <= dimension; ++column) { lb = glp_get_col_lb(glpk_lp, column); ub = glp_get_col_ub(glpk_lp, column); set_mpq_t_from_double(rational_lb, lb); set_mpq_t_from_double(rational_ub, ub); /* Initialize the least common multiple computation. */ mpz_set_si(den_lcm, 1); mpz_lcm(den_lcm, den_lcm, mpq_denref(rational_lb)); mpz_lcm(den_lcm, den_lcm, mpq_denref(rational_ub)); ppl_new_Linear_Expression_with_dimension(&ppl_le, dimension); ppl_assign_Coefficient_from_mpz_t(ppl_coeff, den_lcm); ppl_Linear_Expression_add_to_coefficient(ppl_le, column-1, ppl_coeff); type = glp_get_col_type(glpk_lp, column); add_constraints(ppl_le, type, rational_lb, rational_ub, den_lcm, ppl_cs); ppl_delete_Linear_Expression(ppl_le); } mpq_clear(rational_ub); mpq_clear(rational_lb); /* Deal with the objective function. */ objective = (mpq_t*) malloc((dimension+1)*sizeof(mpq_t)); /* Initialize the least common multiple computation. */ mpz_set_si(den_lcm, 1); mpq_init(objective[0]); set_mpq_t_from_double(objective[0], glp_get_obj_coef(glpk_lp, 0)); for (i = 1; i <= dimension; ++i) { mpq_init(objective[i]); set_mpq_t_from_double(objective[i], glp_get_obj_coef(glpk_lp, i)); /* Update den_lcm. */ mpz_lcm(den_lcm, den_lcm, mpq_denref(objective[i])); } /* Set the ppl_objective_le to be the objective function. */ ppl_new_Linear_Expression_with_dimension(&ppl_objective_le, dimension); /* Set value for objective function's inhomogeneous term. */ mpz_mul(tmp_z, den_lcm, mpq_numref(objective[0])); mpz_divexact(tmp_z, tmp_z, mpq_denref(objective[0])); ppl_assign_Coefficient_from_mpz_t(ppl_coeff, tmp_z); ppl_Linear_Expression_add_to_inhomogeneous(ppl_objective_le, ppl_coeff); /* Set values for objective function's variable coefficients. */ for (i = 1; i <= dimension; ++i) { mpz_mul(tmp_z, den_lcm, mpq_numref(objective[i])); mpz_divexact(tmp_z, tmp_z, mpq_denref(objective[i])); ppl_assign_Coefficient_from_mpz_t(ppl_coeff, tmp_z); ppl_Linear_Expression_add_to_coefficient(ppl_objective_le, i-1, ppl_coeff); } if (verbosity >= 4) { fprintf(output_file, "Objective function:\n"); if (mpz_cmp_si(den_lcm, 1) != 0) fprintf(output_file, "("); ppl_io_fprint_Linear_Expression(output_file, ppl_objective_le); } for (i = 0; i <= dimension; ++i) mpq_clear(objective[i]); free(objective); if (verbosity >= 4) { if (mpz_cmp_si(den_lcm, 1) != 0) { fprintf(output_file, ")/"); mpz_out_str(output_file, 10, den_lcm); } fprintf(output_file, "\n%s\n", (maximize ? "Maximizing." : "Minimizing.")); } ppl_new_Coefficient(&optimum_n); ppl_new_Coefficient(&optimum_d); ppl_new_Generator_zero_dim_point(&optimum_location); optimum_found = use_simplex ? solve_with_simplex(ppl_cs, ppl_objective_le, optimum_n, optimum_d, optimum_location) : solve_with_generators(ppl_cs, ppl_objective_le, optimum_n, optimum_d, optimum_location); ppl_delete_Linear_Expression(ppl_objective_le); if (glpk_lp_num_int > 0) free(integer_variables); if (optimum_found) { mpq_init(optimum); ppl_Coefficient_to_mpz_t(optimum_n, tmp_z); mpq_set_num(optimum, tmp_z); ppl_Coefficient_to_mpz_t(optimum_d, tmp_z); mpz_mul(tmp_z, tmp_z, den_lcm); mpq_set_den(optimum, tmp_z); if (verbosity == 1) fprintf(output_file, "Optimized problem.\n"); if (verbosity >= 2) fprintf(output_file, "Optimum value: %.10g\n", mpq_get_d(optimum)); if (verbosity >= 3) { fprintf(output_file, "Optimum location:\n"); ppl_Generator_divisor(optimum_location, ppl_coeff); ppl_Coefficient_to_mpz_t(ppl_coeff, tmp_z); for (i = 0; i < dimension; ++i) { mpz_set(mpq_denref(tmp1_q), tmp_z); ppl_Generator_coefficient(optimum_location, i, ppl_coeff); ppl_Coefficient_to_mpz_t(ppl_coeff, mpq_numref(tmp1_q)); ppl_io_fprint_variable(output_file, i); fprintf(output_file, " = %.10g\n", mpq_get_d(tmp1_q)); } } #ifndef NDEBUG { ppl_Polyhedron_t ph; unsigned int relation; ppl_new_C_Polyhedron_recycle_Constraint_System(&ph, ppl_cs_copy); ppl_delete_Constraint_System(ppl_cs_copy); relation = ppl_Polyhedron_relation_with_Generator(ph, optimum_location); ppl_delete_Polyhedron(ph); assert(relation == PPL_POLY_GEN_RELATION_SUBSUMES); } #endif maybe_check_results(PPL_MIP_PROBLEM_STATUS_OPTIMIZED, mpq_get_d(optimum)); mpq_clear(optimum); } ppl_delete_Constraint_System(ppl_cs); ppl_delete_Coefficient(optimum_d); ppl_delete_Coefficient(optimum_n); ppl_delete_Generator(optimum_location); glp_delete_prob(glpk_lp); }
int main(int argc, char **argv) { int clocks[MAXCLOCKS*4], lit[4]; int P, p, K, N, n, i, *cl, *now; int d1, d2, d3, d4; int answer; i = 0; /* First digit can only be blank or 1 */ for (d1 = 10; d1 != -1; d1 = (d1 == 10 ? 1 : -1)) { /* * Second digit can be 0-9 UNLESS first digit is 1, * in which case, it can only be 0-2. */ for (d2 = (d1 == 10 ? 1 : 0); (d1 == 10 && d2 <= 9) || (d1 == 1 && d2 <= 2); d2++) { /* Third digit can be anything 0-5 */ for (d3 = 0; d3 <= 5; d3++) { /* Fourth digit can be anything 0-9 */ for (d4 = 0; d4 <= 9; d4++) { CLOCKS[i++] = digits[d1]; CLOCKS[i++] = digits[d2]; CLOCKS[i++] = digits[d3]; CLOCKS[i++] = digits[d4]; } } } } /* P: Number of data set 1 <= P <= 1000 */ scanf("%d", &P); for (p = 1; p <= P; p++) { /* K: Data set number */ /* N: Number of previous displays seen 1 <= N <= 10 */ scanf("%d %d", &K, &N); /* Reset the lit segments we have seen */ lit[0] = lit[1] = lit[2] = lit[3] = 0; /* Read in the N clock faces- last clock face is the current time */ for (n = 0; n < N; n++) { cl = &clocks[n*4]; read_clock(cl); /* Accumulate the lit segments */ unmask(lit, cl); } /* Pointer to the last clock face- the current time */ now = &clocks[(N-1)*4]; answer = -1; /* Check against all possible clocks for 'now' */ for (i = 0; i < NUMCLOCKS * 4; i += 4) { cl = &CLOCKS[i]; if ((cl[0] & lit[0]) != now[0] || (cl[1] & lit[1]) != now[1] || (cl[2] & lit[2]) != now[2] || (cl[3] & lit[3]) != now[3]) { continue; } if (answer == -1) { /* We found an answer; mark it */ answer = i; } else { /* We found another answer; then we're not 100% certain */ answer = -1; break; } } printf("%d ", K); if (answer != -1) { print_clock(&CLOCKS[answer]); } else { printf("?\n"); } } return 0; }