628 research outputs found
The Aurora Or-Parallel Prolog system
Aurora is a prototype or-parallel implementation of the full Prolog language for shared-memory multiprocessors, developed as part of an informal research collaboration known as the "Gigalips Project". It currently runs on Sequent and Encore machines. It has been constructed by adapting Sicstus Prolog, a fast, portable, sequential Prolog system. The techniques for constructing a portable multiprocessor version follow those pioneered in a predecessor system, ANL-WAM. The SRI model was adopted as the means to extend the Sicstus Prolog engine for or-parallel operation. We describe the design and main implementation features of the current Aurora system, and present some experimental results. For a range of benchmarks, Aurora on a 20-processor Sequent Symmetry is 4 to 7 times faster than Quintus Prolog on a Sun 3/75. Good performance is also reported on some large-scale Prolog applications
A Prolog compiler and its extension for OR-parallelism
This report describes algorithms for the compiler component of the Aurora
Or-Parallel Prolog system.
The compiler translates one Prolog clause at a time into a sequence
of abstract instructions. The instruction set is based on the sequential Warren Ab-
stract Machine (WAM) with extensions for full Prolog, shallow backtracking, memory
management and garbage collection, and for the SRI model of or-parallel execution of
Prolog.
Most of the described algorithms apply to compilation of sequential Prolog programs.
The extensions introduced to support or-parallelism are minor, and concern pruning
operators (cut and commit) and compile-time allocation of binding array offsets for
permanent variables (generalised environment trimming).
Code generation proper is kept separate from register allocation, and uses heuristics
for finding a compilation order which minimises the number of register-register copies.
After such copies have been coalesced where possible, register allocation is performed
in a single pass over the intermediate code.
The various compilation phases are described in detail, and the implementation is
compared with some other compilers
On the Efficiency of Optimising Shallow Backtracking in Prolog
The cost of backtracking has been identified as one of the bottlenecks in
achieving peak performance in compiled Prolog programs. Much of the backtracking in
Prolog programs is shallow, i.e. is caused by unification failures in the head of a
clause when there are more alternatives for the same procedure, and so special treatment
of this form of backtracking has been proposed as a significant optimisation. This
paper describes a modified WAM which optimises shallow backtracking. Four different
implementation approaches are compared. A number of benchmark results are presented,
measuring the relative tradeoffs between compilation time, code size, and run time. The
results show that the speedup gained by this optimisation can be significant
Divided we stand: Parallel distributed stack memory management
We present an overview of the stack-based memory management techniques that we used in our non-deterministic and-parallel Prolog systems: &-Prolog and DASWAM. We believe
that the problems associated with non-deterministic and-parallel systems are more general than those encountered in or-parallel and deterministic and-parallel systems, which can be seen as subsets of this more general case. We develop on the previously proposed "marker scheme", lifting some of the restrictions associated with the selection of goals while keeping (virtual) memory consumption down. We also review some of the other problems associated with the stack-based management scheme, such as handling of forward and backward execution, cut, and roll-backs
Towards high-level execution primitives for and-parallelism: preliminary results
Most implementations of parallel logic programming rely on complex low-level machinery which is arguably difflcult to implement and modify. We explore an alternative approach aimed at taming that complexity by raising core parts of the implementation to the source language level for the particular case of and-parallelism. Therefore, we handle a signiflcant portion of the parallel implementation mechanism at the Prolog level with the help of a comparatively small number of concurrency-related primitives which take care of lower-level tasks such as locking, thread management, stack set management, etc. The approach does not eliminate altogether modiflcations to the abstract machine, but it does greatly simplify them and it also facilitates experimenting with different alternatives. We show how this approach allows implementing both restricted and unrestricted (i.e., non fork-join) parallelism. Preliminary experiments show that the amount of performance sacriflced is reasonable, although granularity control is required in some cases. Also, we observe that the availability of unrestricted parallelism contributes to better observed speedups
And-or parallel prolog: a recomputation based approach
We argĂĽe that in order to exploit both Independent And- and Or-parallelism in Prolog programs there is advantage in recomputing some of the independent goals, as opposed to all their solutions being reused. We present an abstract model, called the Composition-Tree, for representing and-or parallelism in Prolog Programs. The Composition-tree closely mirrors sequential Prolog execution by recomputing some independent goals rather than fully re-using them. We also outline two environment representation techniques for And-Or parallel execution of full Prolog based on the
Composition-tree model abstraction. We argĂĽe that these techniques have advantages over earlier proposals for exploiting and-or parallelism in Prolog
Threads and Or-Parallelism Unified
One of the main advantages of Logic Programming (LP) is that it provides an
excellent framework for the parallel execution of programs. In this work we
investigate novel techniques to efficiently exploit parallelism from real-world
applications in low cost multi-core architectures. To achieve these goals, we
revive and redesign the YapOr system to exploit or-parallelism based on a
multi-threaded implementation. Our new approach takes full advantage of the
state-of-the-art fast and optimized YAP Prolog engine and shares the underlying
execution environment, scheduler and most of the data structures used to
support YapOr's model. Initial experiments with our new approach consistently
achieve almost linear speedups for most of the applications, proving itself as
a good alternative for exploiting implicit parallelism in the currently
available low cost multi-core architectures.Comment: 17 pages, 21 figures, International Conference on Logic Programming
(ICLP 2010
Experimenting with independent and-parallel prolog using standard prolog
This paper presents an approximation to the study of parallel systems using sequential tools. The Independent And-parallelism in Prolog is an example of parallel processing paradigm in the framework of logic programming, and implementations like <fc-Prolog uncover the potential performance of parallel processing. But this potential can also be explored using only sequential systems. Being the spirit of this paper to show how this can be done with a standard system, only standard Prolog will be used in the implementations included. Such implementations include tests for parallelism in And-Prolog, a correctnesschecking
meta-interpreter of <fc-Prolog and a simulator of parallel execution for <fc-Prolog
Recomputation based implementation of and-or parallel prolog
We argĂĽe that in order to exploit both Independent And- and Or-parallelism in Prolog programs there is advantage in recomputing some of the independent goals, as opposed
to all their solutions being reused. We present an abstract model, called the Composition- Tree, for representing and-or parallelism in Prolog Programs. The Composition-tree
closely mirrors sequential Prolog execution by recomputing some independent goals rather than fully re-using them. We also outline two environment representation techniques for
And-Or parallel execution of full Prolog based on the Composition-tree model abstraction. We argĂĽe that these techniques have advantages over earlier proposals for exploiting and-or parallelism in Prolog
- …