Added Grounder::Split(), which caches split setups.
The whole purpose of Grounder::Split() is the caching. The cache is part of Grounder because it is depends on Grounder::Ground()'s setup: when Grounder::Ground() re-grounds, the cache must be emptied to avoid false lookups. We do not update the cache when new clauses without new names are added, as this should have the same cost (in terms of Setup::AddClause()) as spawning new children later. All experiments so far are strongly in favour of a cache. Minesweeper is about twice as fast; test-siblings.lela is >25 times as fast. An analogous cache for assignments will be added later.
Loading
Please register or sign in to comment