ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
vivify.h File Reference
#include "global.h"
Include dependency graph for vivify.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void kissat_vivify (struct kissat *)
 

Function Documentation

◆ kissat_vivify()

void kissat_vivify ( struct kissat * solver)

Definition at line 1402 of file vivify.c.

1402 {
1403 if (solver->inconsistent)
1404 return;
1405 KISSAT_assert (!solver->level);
1406 KISSAT_assert (solver->probing);
1407 KISSAT_assert (solver->watching);
1408 if (!GET_OPTION (vivify))
1409 return;
1411 return;
1412 double irr_budget = DELAYING (vivifyirr) ? 0 : GET_OPTION (vivifyirr);
1413 double tier1_budget = GET_OPTION (vivifytier1);
1414 double tier2_budget = GET_OPTION (vivifytier2);
1415 double tier3_buget = GET_OPTION (vivifytier3);
1416 if (!REDUNDANT_CLAUSES)
1417 tier1_budget = tier2_budget = tier3_buget = 0;
1418 double sum = irr_budget + tier1_budget + tier2_budget + tier3_buget;
1419 if (!sum)
1420 return;
1421
1422 START (vivify);
1423 INC (vivifications);
1424#if !defined(KISSAT_NDEBUG) || defined(METRICS)
1425 KISSAT_assert (!solver->vivifying);
1426 solver->vivifying = true;
1427#endif
1428
1429 SET_EFFORT_LIMIT (limit, vivify, probing_ticks);
1430 const uint64_t total = limit - solver->statistics_.probing_ticks;
1431 limit = solver->statistics_.probing_ticks;
1432 unsigned tier1_limit = vivify_tier1_limit (solver);
1433 unsigned tier2_limit = vivify_tier2_limit (solver);
1434 if (tier1_budget && tier2_budget && tier1_limit == tier2_limit) {
1435 tier1_budget += tier2_budget, tier2_budget = 0;
1436 LOG ("vivification tier1 matches tier2 "
1437 "thus using tier2 budget for tier1");
1438 }
1439
1440 {
1442 init_vivifier (solver, &vivifier);
1443 if (tier1_budget) {
1444 limit += (total * tier1_budget) / sum;
1445 vivify_tier1 (&vivifier, limit);
1446 }
1447 if (tier2_budget && !solver->inconsistent &&
1449 limit += (total * tier2_budget) / sum;
1450 vivify_tier2 (&vivifier, limit);
1451 }
1452 if (tier3_buget && !solver->inconsistent &&
1454 limit += (total * tier3_buget) / sum;
1455 vivify_tier3 (&vivifier, limit);
1456 }
1457 if (irr_budget && !solver->inconsistent &&
1459 limit += (total * irr_budget) / sum;
1460 vivify_irredundant (&vivifier, limit);
1461 if (kissat_average (vivifier.vivified, vivifier.tried) < 0.01)
1462 BUMP_DELAY (vivifyirr);
1463 else
1464 REDUCE_DELAY (vivifyirr);
1465 }
1466 release_vivifier (&vivifier);
1467 }
1468
1469#ifndef KISSAT_QUIET
1470 if (solver->statistics_.probing_ticks < limit) {
1471 uint64_t delta = limit - solver->statistics_.probing_ticks;
1472 kissat_phase (solver, "vivify-limit", GET (vivifications),
1473 "has %" PRIu64 " ticks left %.2f%%", delta,
1474 kissat_percent (delta, total));
1475 } else {
1476 uint64_t delta = solver->statistics_.probing_ticks - limit;
1477 kissat_phase (solver, "vivify-limit", GET (vivifications),
1478 "exceeded by %" PRIu64 " ticks %.2f%%", delta,
1479 kissat_percent (delta, total));
1480 }
1481#endif
1482#if !defined(KISSAT_NDEBUG) || defined(METRICS)
1483 KISSAT_assert (solver->vivifying);
1484 solver->vivifying = false;
1485#endif
1486 STOP (vivify);
1487}
#define INC(NAME)
#define LOG(...)
#define BUMP_DELAY(NAME)
Definition kimits.h:183
#define REDUCE_DELAY(NAME)
Definition kimits.h:185
#define DELAYING(NAME)
Definition kimits.h:181
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define SET_EFFORT_LIMIT(LIMIT, NAME, THRESHHOLD)
Definition limit.hpp:131
#define GET_OPTION(N)
Definition options.h:295
#define kissat_phase(...)
Definition print.h:48
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
#define GET(NAME)
Definition statistics.h:416
#define REDUNDANT_CLAUSES
Definition statistics.h:339
#define vivify_terminated_3
Definition terminate.h:83
#define TERMINATED(BIT)
Definition terminate.h:42
#define vivify_terminated_5
Definition terminate.h:85
#define vivify_terminated_2
Definition terminate.h:82
#define vivify_terminated_4
Definition terminate.h:84
struct vivifier vivifier
Definition vivify.c:167