26,095 research outputs found
Understanding the complexity of #SAT using knowledge compilation
Two main techniques have been used so far to solve the #P-hard problem #SAT.
The first one, used in practice, is based on an extension of DPLL for model
counting called exhaustive DPLL. The second approach, more theoretical,
exploits the structure of the input to compute the number of satisfying
assignments by usually using a dynamic programming scheme on a decomposition of
the formula. In this paper, we make a first step toward the separation of these
two techniques by exhibiting a family of formulas that can be solved in
polynomial time with the first technique but needs an exponential time with the
second one. We show this by observing that both techniques implicitely
construct a very specific boolean circuit equivalent to the input formula. We
then show that every beta-acyclic formula can be represented by a polynomial
size circuit corresponding to the first method and exhibit a family of
beta-acyclic formulas which cannot be represented by polynomial size circuits
corresponding to the second method. This result shed a new light on the
complexity of #SAT and related problems on beta-acyclic formulas. As a
byproduct, we give new handy tools to design algorithms on beta-acyclic
hypergraphs
Challenges for Efficient Query Evaluation on Structured Probabilistic Data
Query answering over probabilistic data is an important task but is generally
intractable. However, a new approach for this problem has recently been
proposed, based on structural decompositions of input databases, following,
e.g., tree decompositions. This paper presents a vision for a database
management system for probabilistic data built following this structural
approach. We review our existing and ongoing work on this topic and highlight
many theoretical and practical challenges that remain to be addressed.Comment: 9 pages, 1 figure, 23 references. Accepted for publication at SUM
201
High Performance Algorithms for Counting Collisions and Pairwise Interactions
The problem of counting collisions or interactions is common in areas as
computer graphics and scientific simulations. Since it is a major bottleneck in
applications of these areas, a lot of research has been carried out on such
subject, mainly focused on techniques that allow calculations to be performed
within pruned sets of objects. This paper focuses on how interaction
calculation (such as collisions) within these sets can be done more efficiently
than existing approaches. Two algorithms are proposed: a sequential algorithm
that has linear complexity at the cost of high memory usage; and a parallel
algorithm, mathematically proved to be correct, that manages to use GPU
resources more efficiently than existing approaches. The proposed and existing
algorithms were implemented, and experiments show a speedup of 21.7 for the
sequential algorithm (on small problem size), and 1.12 for the parallel
proposal (large problem size). By improving interaction calculation, this work
contributes to research areas that promote interconnection in the modern world,
such as computer graphics and robotics.Comment: Accepted in ICCS 2019 and published in Springer's LNCS series.
Supplementary content at https://mjsaldanha.com/articles/1-hpc-ssp
Speculative Staging for Interpreter Optimization
Interpreters have a bad reputation for having lower performance than
just-in-time compilers. We present a new way of building high performance
interpreters that is particularly effective for executing dynamically typed
programming languages. The key idea is to combine speculative staging of
optimized interpreter instructions with a novel technique of incrementally and
iteratively concerting them at run-time.
This paper introduces the concepts behind deriving optimized instructions
from existing interpreter instructions---incrementally peeling off layers of
complexity. When compiling the interpreter, these optimized derivatives will be
compiled along with the original interpreter instructions. Therefore, our
technique is portable by construction since it leverages the existing
compiler's backend. At run-time we use instruction substitution from the
interpreter's original and expensive instructions to optimized instruction
derivatives to speed up execution.
Our technique unites high performance with the simplicity and portability of
interpreters---we report that our optimization makes the CPython interpreter up
to more than four times faster, where our interpreter closes the gap between
and sometimes even outperforms PyPy's just-in-time compiler.Comment: 16 pages, 4 figures, 3 tables. Uses CPython 3.2.3 and PyPy 1.
- âŠ