This paper describes EQUALS, a fast parallel implementation of
a lazy functional language
on a commercially available shared-memory parallel machine, the Sequent Symmetry.
In contrast to previous implementations, we propagate normal form demand at
compile time as
well as run time, and detect parallelism automatically using strictness analysis.
The EQUALS
implementation indicates the effectiveness of NF-demand propagation in
identifying significant parallelism and in achieving good sequential as well
as parallel performance. Another
important difference between EQUALS and previous implementations is
the use of reference
counting for memory management, instead of mark-and-sweep or copying garbage
collection. Implementation results show that reference counting leads to very good
scalability and low
memory requirements, and offers sequential performance comparable to generational
garbage collectors. We compare the performance of EQUALS with that of other
parallel implementations (the 〈v, G〉-machine and
GAML) as well as with the performance of SML/NJ, a
sequential implementation of a strict language.