Revised 7.1 and 7.2
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1832 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
9ed8306415
commit
74da8a99fc
@ -981,7 +981,7 @@ convenient abbreviation.
|
|||||||
|
|
||||||
\section{Performance Evaluation} \label{sec:perf}
|
\section{Performance Evaluation} \label{sec:perf}
|
||||||
%================================================
|
%================================================
|
||||||
We evaluate \JITI on a set of benchmarks and on applications.
|
We evaluate \JITI on a set of benchmarks and logic programming applications.
|
||||||
Throughout, we compare performance of JITI with first argument
|
Throughout, we compare performance of JITI with first argument
|
||||||
indexing. For the benchmarks of Sect.~\ref{sec:perf:ineffective}
|
indexing. For the benchmarks of Sect.~\ref{sec:perf:ineffective}
|
||||||
and~\ref{sec:perf:effective} which involve both systems, we used a
|
and~\ref{sec:perf:effective} which involve both systems, we used a
|
||||||
@ -1001,17 +1001,17 @@ have no effect other than an overhead due to runtime index
|
|||||||
construction. We therefore wanted to measure this overhead.
|
construction. We therefore wanted to measure this overhead.
|
||||||
%
|
%
|
||||||
As both systems support tabling, we decided to use tabling benchmarks
|
As both systems support tabling, we decided to use tabling benchmarks
|
||||||
because they are relatively small and easy to understand, and because
|
because they are small and easy to understand, and because they are a
|
||||||
they are a worst case for JITI in the following sense: tabling avoids
|
worst case for JITI in the following sense: tabling avoids generating
|
||||||
generating repetitive queries and the benchmarks operate over EDB
|
repetitive queries and the benchmarks operate over EDB predicates of
|
||||||
predicates of size approximately equal the size of the program.
|
size approximately equal the size of the program. We used \compress, a
|
||||||
We used \compress, a tabled program that solves a puzzle from an ICLP
|
tabled program that solves a puzzle from an ICLP Prolog programming
|
||||||
Prolog programming competition. The other benchmarks are different
|
competition. The other benchmarks are different variants of tabled
|
||||||
variants of tabled left, right and doubly recursive transitive closure
|
left, right and doubly recursive transitive closure over an EDB
|
||||||
over an EDB predicate forming a chain of size shown in
|
predicate forming a chain of size shown in Table~\ref{tab:ineffective}
|
||||||
Table~\ref{tab:ineffective} in parentheses. For each variant of
|
in parentheses. For each variant of transitive closure, we issue two
|
||||||
transitive closure, we issue two queries: one with mode
|
queries: one with mode \code{(in,out)} and one with mode
|
||||||
\code{(in,out)} and one with mode \code{(out,out)}.
|
\code{(out,out)}.
|
||||||
%
|
%
|
||||||
For YAP, indices on the first argument are built on all benchmarks
|
For YAP, indices on the first argument are built on all benchmarks
|
||||||
under JITI.\TODO{Vitor please verify this sentence}
|
under JITI.\TODO{Vitor please verify this sentence}
|
||||||
@ -1055,9 +1055,9 @@ columns separately.
|
|||||||
\cline{2-7}
|
\cline{2-7}
|
||||||
Benchmark & 1st & JITI &{\bf ratio}& 1st & JITI &{\bf ratio}\\
|
Benchmark & 1st & JITI &{\bf ratio}& 1st & JITI &{\bf ratio}\\
|
||||||
\hline
|
\hline
|
||||||
\sgCyl & 2864 & 24 &$119\times$& 2390 & 28 &$85\times$\\
|
\sgCyl & 2,864 & 24 &$119\times$& 2,390 & 28 &$85\times$\\
|
||||||
\muta & 30,057 &16,782 &$179\%$ &26,314 &21,574 &$122\%$ \\
|
\muta & 30,057 &16,782 &$179\%$ &26,314 &21,574 &$122\%$ \\
|
||||||
\pta & 5131 & 188 & $27\times$& 4442 & 279 &$16\times$\\
|
\pta & 5,131 & 188 & $27\times$& 4,442 & 279 &$16\times$\\
|
||||||
\tea &1,478,813 &54,616 & $27\times$& --- & --- & --- \\
|
\tea &1,478,813 &54,616 & $27\times$& --- & --- & --- \\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
@ -1068,9 +1068,9 @@ columns separately.
|
|||||||
\subsection{Performance of \JITI when effective} \label{sec:perf:effective}
|
\subsection{Performance of \JITI when effective} \label{sec:perf:effective}
|
||||||
%--------------------------------------------------------------------------
|
%--------------------------------------------------------------------------
|
||||||
On the other hand, when \JITI is effective, it can significantly
|
On the other hand, when \JITI is effective, it can significantly
|
||||||
improve time performance. We use the following programs:\TODO{If time
|
improve time performance. We use the following programs and
|
||||||
permits, we should also add FSA benchmarks (\bench{k963}, \bench{dg5}
|
applications:\TODO{If time permits, we should also add FSA benchmarks
|
||||||
and \bench{tl3})}
|
(\bench{k963}, \bench{dg5} and \bench{tl3})}
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item[\sgCyl] The same generation DB benchmark on a $24 \times 24
|
\item[\sgCyl] The same generation DB benchmark on a $24 \times 24
|
||||||
\times 2$ cylinder. We issue the open query.
|
\times 2$ cylinder. We issue the open query.
|
||||||
@ -1090,9 +1090,9 @@ and \bench{tl3})}
|
|||||||
|
|
||||||
As can be seen in Table~\ref{tab:effective}, \JITI significantly
|
As can be seen in Table~\ref{tab:effective}, \JITI significantly
|
||||||
improves the performance of these applications. In \muta, which spends
|
improves the performance of these applications. In \muta, which spends
|
||||||
most of its time in recursive predicates, the speed up is~$79\%$ in
|
most of its time in recursive predicates, the speed up is only $79\%$
|
||||||
YAP and~$22\%$ in XXX. The remaining benchmarks execute several times
|
in YAP and~$22\%$ in XXX. The remaining benchmarks execute several
|
||||||
(from~$16$ up to~$119$) faster. It is important to realize that
|
times (from~$16$ up to~$119$) faster. It is important to realize that
|
||||||
\emph{these speedups are obtained automatically}, i.e., without any
|
\emph{these speedups are obtained automatically}, i.e., without any
|
||||||
programmer intervention or by using any compiler directives, in all
|
programmer intervention or by using any compiler directives, in all
|
||||||
these applications.
|
these applications.
|
||||||
@ -1103,8 +1103,8 @@ With the open call to \texttt{same\_generation/2}, most work in this
|
|||||||
benchmark consists of calling \texttt{cyl/2} facts in three different
|
benchmark consists of calling \texttt{cyl/2} facts in three different
|
||||||
modes: with both arguments unbound, with the first argument bound, or
|
modes: with both arguments unbound, with the first argument bound, or
|
||||||
with only the second argument bound. Demand-driven indexing improves
|
with only the second argument bound. Demand-driven indexing improves
|
||||||
performance in the last case only, but this makes a big difference in
|
performance in the last case only, but this improvement makes a big
|
||||||
this benchmark.
|
difference in this benchmark.
|
||||||
|
|
||||||
\begin{small}
|
\begin{small}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@ -1121,7 +1121,8 @@ this benchmark.
|
|||||||
|
|
||||||
\subsection{Performance of \JITI on ILP applications} \label{sec:perf:ILP}
|
\subsection{Performance of \JITI on ILP applications} \label{sec:perf:ILP}
|
||||||
%-------------------------------------------------------------------------
|
%-------------------------------------------------------------------------
|
||||||
The need for \JITI was originally motivated by ILP applications.
|
The need for \JITI was originally noticed in inductive logic
|
||||||
|
programming applications.
|
||||||
Table~\ref{tab:ilp:time} shows JITI performance on some learning tasks
|
Table~\ref{tab:ilp:time} shows JITI performance on some learning tasks
|
||||||
using the ALEPH system~\cite{ALEPH}. The dataset \Krki tries to
|
using the ALEPH system~\cite{ALEPH}. The dataset \Krki tries to
|
||||||
learn rules from a small database of chess end-games;
|
learn rules from a small database of chess end-games;
|
||||||
|
Reference in New Issue
Block a user