Datalog programs are good candidates for being evaluated with a parallel engine. Are there approaches that are based on tabling and utilize multi-core CPUs, i.e. shared memory?
Thanks! That is certainly a great project, only the approach does not integrate well with the type of Datalog engine I have; my engine uses Prolog-style SLD & tabling -- so pretty much like XSB.
We store facts on a dedicated object store since we have a single base table of quadruples. The object store is implemented in C/C++ and linked to a Prolog program that realizes the tabled evaluation. I am not very familiar with multi-threading but I guess that parallel calls to the interface of the object store could result in inconsistency due to global variables.
Yes, as far as I know the tabled Datalog evaluation is faster than bottom-up, even when the buttom up evaluator uses magic sets.
N.B.: We actually implemented some algorithms of Rainer Manthey and colleagues for the integrity checker of our system. Interestingly, the tabled rule evaluator makes most of the related optimizations of the integrity checker obsolete.