                Improved KLIC with Optimized Goal Scheduling
                    and High Performance Thread Execution
                           Copyright (C) 1998
             Hiroshi Nakashima, Kazuhiko Ohno, Namiyo Sugiyama
            Department of Information and Computer Sciences 
                    Toyohashi University of Technology


1. Abstract

An  improved version of the parallel logic programming language system
KLIC, with  an  optimized  goal  scheduler  and a program analyzer for
optimization.  


2. Features

Since the original version of KLIC dynamically schedules the execution
order   of   goals, its  scheduling  overhead  may  cause  significant
performance  degradation  if  your  program  consists of, for example,
communicating sequential processes.  

This  optimized version aims to reduce the scheduling overhead through
compile-time  dependency  analysis  to  find threads.   Since a thread
consists  of  goals whose order of execution is statically determined,
the  runtime system efficiently executes the thread without scheduling
overhead.   Moreover, this  latest  version  is  much faster in thread
execution  than  the  previous version because the stacking method for
thread execution is improved.  


3.Functions

 - Compile-time dependency analysis for static scheduling of the goals
   in a thread.  

 - Efficient   runtime   scheduling   combining   intra-thread  static
   scheduling and inter-thread dynamic scheduling.  

 - Intra-thread execution environment management with stacks to reduce
   GC frequency and to improve access locality.  

NOTE: Because  this  version is a prototype, we have some restrictions
described in Section 5.


4.File Directories


The files in the following directories of the standard distribution of
KLIC are modified.

 - compiler             optimized version of compiler
 - runtime              optimized version of runtime system
 - include/klic         include files for optimized runtime system

The following directories are added to the standard distribution.

 - compiler/analyzer    analyzer
 - sched-test           test programs


5. How to use

Here, we describe the difference with the original KLIC.

5.1 Installation

  Execute `Configure' at the top directory and `make'.

5.2 compilation

When the installation is completed, two KL1 compilers should have been
created:

  - kl1cmp: same as the original KLIC.

  - kl1cmp-t: kl1cmp with analyzer and optimizer.

The compiler-driver `klic' has the additional option as follows:

  - -T :compile goals into threads.

When  this  option is specified, klic attaches `-t' to the name of KL1
compiler.  if you specify the compiler's name with `-K' option.  

We  have sample programs and Makefile under `sched-test/'.   By typing
`make'  under  the  directory,  the  following  executable  files  are 
generated for each xxx.kl1.  

  - xxx   : same as the original KLIC
  - xxx-t : goals are compiled into threads.       


6. Limitations

This version has the following limitations.

We  made  tests  for the sample programs under `sched-test/', but some
other programs may cause errors due to the bugs of this compiler.  

- Restrictions in program description

  - The program must be well-moded.

  - @priority cannot be used.

  - Parallel execution is not supported.

  - Only the following built-in predicates are available.
      - tt =/2, wait/1, current_priority/1, current_node/2
      - atomic/1
      - atom/1, make_atom/2, atom_number/2, get_atom_string/2,
        intern/2, get_atom_name/2
      - integer/1, :=/2
      - integer arithmetics like `add/3', and arithmetic macros like `+', `-'.
      - integer comparison like `equal/2', and comparison macros like `=:='.
      - functor/3, new_functor/3, arg/3, setarg/4
      - list/1
      - io:outstream/1

- Restriction in compilation and execution

  - The source program must be in one file.

  - The runtime tracing is not supported.




