Written beginning of Perf Section.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1823 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
fe5b47afbb
commit
c679e16cd2
@ -865,9 +865,9 @@ complications:
|
|||||||
ISO Prolog standard becomes harder.
|
ISO Prolog standard becomes harder.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
We will briefly discuss possible ways of handling these complications.
|
We will briefly discuss possible ways of handling these complications.
|
||||||
However, we note that most Prolog systems do in fact provide indexing
|
However, we note that Prolog systems typically provide indexing for
|
||||||
for dynamic predicates and thus already deal in some way or another
|
dynamic predicates and thus already deal in some way or another with
|
||||||
with these issues. It's just that \JITI makes these problems harder.
|
these issues. It's just that \JITI makes these problems harder.
|
||||||
|
|
||||||
|
|
||||||
\section{Implementation in XXX and in YAP} \label{sec:impl}
|
\section{Implementation in XXX and in YAP} \label{sec:impl}
|
||||||
@ -889,7 +889,9 @@ directive for these predicates.} For dynamic predicates \JITI is
|
|||||||
employed only if they consist of Datalog facts; if a clause which is
|
employed only if they consist of Datalog facts; if a clause which is
|
||||||
not a Datalog fact is asserted, all dynamically created index tables
|
not a Datalog fact is asserted, all dynamically created index tables
|
||||||
for the predicate are simply dropped and the \jitiONconstant
|
for the predicate are simply dropped and the \jitiONconstant
|
||||||
instruction becomes a \instr{noop}.
|
instruction becomes a \instr{noop}. All these are done automatically,
|
||||||
|
but the user can disable \JITI in compiled code using an appropriate
|
||||||
|
compiler option.
|
||||||
|
|
||||||
YAP implements \JITI since version 5. The current implementation
|
YAP implements \JITI since version 5. The current implementation
|
||||||
supports static code, dynamic code, and the internal database. It
|
supports static code, dynamic code, and the internal database. It
|
||||||
@ -903,24 +905,36 @@ relations: in such cases YAP will maintain a list of matching clauses
|
|||||||
at each \jitiSTAR node. Indexing dynamic predicates in YAP follows
|
at each \jitiSTAR node. Indexing dynamic predicates in YAP follows
|
||||||
very much the same algorithm as static indexing: the key idea is that
|
very much the same algorithm as static indexing: the key idea is that
|
||||||
most nodes in the index tree must be allocated separately so that they
|
most nodes in the index tree must be allocated separately so that they
|
||||||
can grow or contract independently. YAP can index arguments with
|
can grow or contract independently. YAP can index arguments where some
|
||||||
unconstrained variables, but only for static predicates, as it would
|
clauses have unconstrained variables, but only for static predicates,
|
||||||
complicate updates.
|
as it would complicate updates.
|
||||||
|
|
||||||
|
YAP uses the term JITI (Just-In-Time Indexing) to refer to \JITI. In
|
||||||
|
the next section we will take the liberty to use this term as a
|
||||||
|
convenient abbreviation.
|
||||||
|
|
||||||
|
|
||||||
\section{Performance Evaluation} \label{sec:perf}
|
\section{Performance Evaluation} \label{sec:perf}
|
||||||
%================================================
|
%================================================
|
||||||
Next, we evaluate \JITI on a set of benchmarks and on real life
|
Next, we evaluate \JITI on a set of benchmarks and on real life
|
||||||
applications.
|
applications. For the benchmarks of Sect.~\ref{sec:perf:overhead}
|
||||||
|
and~\ref{sec:perf:speedups}, which involve both systems, we used a 2.4
|
||||||
|
GHz P4-based laptop with 512~MB of memory running Linux and report
|
||||||
|
times in milliseconds. For the benchmarks of Sect.~\ref{sec:perf:ILP},
|
||||||
|
which involve YAP only, we used a
|
||||||
|
%
|
||||||
|
VITOR PLEASE ADD
|
||||||
|
%
|
||||||
|
and report times in seconds.
|
||||||
|
|
||||||
\paragraph{Benchmarking environment}
|
\subsection{JITI Overhead} \label{sec:perf:overhead}
|
||||||
|
%---------------------------------------------------
|
||||||
\subsection{JITI Overhead}
|
|
||||||
6.2 JITI overhead (show the "bad" cases first)
|
6.2 JITI overhead (show the "bad" cases first)
|
||||||
present Prolog/tabled benchmarks that do NOT benefit from JITI
|
present Prolog/tabled benchmarks that do NOT benefit from JITI
|
||||||
and measure the time overhead -- hopefully this is low
|
and measure the time overhead -- hopefully this is low
|
||||||
\subsection{JITI Speedups}
|
|
||||||
|
|
||||||
|
\subsection{JITI Speedups} \label{sec:perf:speedups}
|
||||||
|
%---------------------------------------------------
|
||||||
Here I already have "compress", "mutagenesis" and "sg\_cyl"
|
Here I already have "compress", "mutagenesis" and "sg\_cyl"
|
||||||
The "sg\_cyl" has a really impressive speedup (2 orders of
|
The "sg\_cyl" has a really impressive speedup (2 orders of
|
||||||
magnitude). We should keep the explanation in your text.
|
magnitude). We should keep the explanation in your text.
|
||||||
@ -928,8 +942,8 @@ applications.
|
|||||||
If time permits, we should also add some FSA benchmarks
|
If time permits, we should also add some FSA benchmarks
|
||||||
(e.g. "k963", "dg5" and "tl3" from PLDI)
|
(e.g. "k963", "dg5" and "tl3" from PLDI)
|
||||||
|
|
||||||
\subsection{JITI In ILP}
|
\subsection{JITI in ILP} \label{sec:perf:ILP}
|
||||||
|
%--------------------------------------------
|
||||||
The need for just-in-time indexing was originally motivated by ILP
|
The need for just-in-time indexing was originally motivated by ILP
|
||||||
applications. Table~\ref{tab:aleph} shows JITI performance on some
|
applications. Table~\ref{tab:aleph} shows JITI performance on some
|
||||||
learning tasks using the ALEPH system~\cite{}. The dataset
|
learning tasks using the ALEPH system~\cite{}. The dataset
|
||||||
|
Reference in New Issue
Block a user