SISAL Mini-FAQ

Archive-name: mini-faq.html
Last-modified: 1995/08/25
Version: 13.0.3

If you have any questions or comments about this mini-faq, please direct them to mailto:sisal-help@sisal.llnl.goviand not to the list at large. The following questions are addressed in this document:

  1. What is SISAL?
  2. What does it look like?
  3. How does it work?
  4. Aren't functional languages slow?
  5. Where is the full-sized faq?
  6. How do I go about learning Sisal?
  7. What is the sisal-info mailing list?
  8. What is the current version of the SISAL compiler and where is it?
  9. What projects are in progress?
  10. What other sources of information are available?
  11. How do I subscribe/unsubscribe from the sisal-info list?

  1. What is SISAL?

    "SISAL" is an acronym for Streams and Iteration in a Single Assignment Language.

    SISAL is a functional data-flow computer language with implicit parallelism. While retaining the imperative programming "feel" of languages like C and Fortran, a SISAL program is free of side-effects. This allows optimizations targeting a variety of sequential, vector, and multi-processor computers. Although a general-purpose language (with elementary I/O), it is designed to enhance the expressibility of numerical computation on high-performance machines.

  2. What does it look like?

    Since everything is a value, control statements like "if" and "for" are higher-order functions. In the example, "min1" and "min2" have the same value using two different functions.

        i := 5;
        j := 3*4;
        min1 := min(i, j);
        min2 := if i<j then i else j;
        

    The "for" loop generating the inner product of the two arrays is also a value. No explicit memory management is needed. Also, since there are no dependencies in the loop, all of the loop bodies may be run in parallel. No user-specified locks or barriers are needed to convert to a parallel version. "sum" is a predefined reduction of the values from the loop body.

        t := for i in 1, 10
                 c = A[i]*B[i];
             returns value of sum c
             end for;
        

  3. How does it work?

    The SISAL parser translates the source program into the IF1 data-flow representation. Nodes in IF1 denote operations such as add or divide while edges represent values that are passed from node to node. Functions are graph boundaries that surround groups of nodes and edges.

               3   4     To produce the value of "min1" above, values
                \ /      3 and 4 flow into the multiply node and out
           5     *       on edge "j".  Both "i" and "j" are input to
        (i) \   / (j)    the "min" function.  Its output is the value
           +-----+       "min1".  The upper part of this graph would
           | min |       be shared to input to "min2".  The only 
           +-----+       addition is the "if" function node.  Since
              |          all data dependencies are revealed, the compiler
              | (min1)   can find optimizations and parallelism easier.
        

  4. Aren't functional languages slow?

    SISAL generates C code which is compiled by the native compiler. With its optimizations, most codes run within +/- 20% of the fastest versions in traditional imperative languages. See

    http://www.cs.nott.ac.uk/Research/fpg/index.html
    A benefit is that no source changes need to be made to run on a parallel machine.

  5. Where do I find the full-sized FAQ?

    It is NOT YET available.

  6. How do I go about learning Sisal?

    Numerous documents are available both on- and off-line that describe the Sisal language and its support software in varying detail. For a gentle introduction to the Sisal language, see the Sisal Tutorial web pages at

    http://redhook.llnl.gov/iscr/projects/crg/sisal.tutorial/

    Additional documents, software, and sample programs can be found on the Sisal Language Project ftp server:

    ftp://sisal.llnl.gov/pub/sisal/

  7. What is the sisal-info mailing list?

    This list is for discussions about installing and using the SISAL compiler OSC (Optimizing SISAL Compiler). Talk about SISAL development and projects is also welcome, as are enhancements and bugfixes. Requests for help and bug reports for the developers are sent to

    mailto:sisal-help@sisal.llnl.gov

  8. What is the current version of the SISAL compiler and where is it?

    The current officially released version is OSC 13.0.3 at:

    ftp://sisal.llnl.gov/pub/sisal/OSC-13.0.3.tar.Z
    This version has been ported to most sequential, vector, and shared memory multi-processor machines.

  9. What projects are in progress?

    The draft SISAL90 language document and beta parser are due for release in the first quarter of 1995. Distributed memory ports to the Meiko CS-2, Cray T3D and Thinking Machines CM-5 are in development. A SISAL performance monitoring and display tool is also in the works.

  10. What other sources of information are available?

    The compiler manual and SISAL 1.2 examples are available:

    ftp://sisal.llnl.gov/pub/sisal/MANUAL.12.7.tar.Z ftp://sisal.llnl.gov/pub/sisal/EXAMPLES-13.0.3.tar.Z
    The SISAL90 manual is NOT YET available at:
    ftp://sisal.llnl.gov/pub/sisal/SISAL90.tar.Z
    The WWW has background information on SISAL at:
    http://www.llnl.gov/sisal/SisalHomePage.html ftp://sisal.llnl.gov/pub/sisal/mini-faq.html
    Miscellaneous questions are taken at:
    mailto:sisal-help@sisal.llnl.gov

  11. How do I subscribe/unsubscribe from the sisal-info list?

    Please do NOT send a message to the entire list asking to subscribe/unsubscribe. You'll only succeed in sending the message to hundreds of people who can't do anything about it.

    Send mail to

    mailto:sisal-info-request@sisal.llnl.gov
    and ask to be added or removed. The best way is to include the text:
    subscribe sisal-info [your-email-address-here]
    unsubscribe sisal-info [your-email-address-here]