Results 1 -
2 of
2
Simplifying Parallel List Traversal
, 1995
"... Computations described using Bird's constructive algebra of lists are nicely amenable to parallel implementation. Indeed, by using higher-order functions, ordered list traversals such as foldl and foldr can be expressed as unordered reductions. Based on this observation, a set of optimizations have ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
Computations described using Bird's constructive algebra of lists are nicely amenable to parallel implementation. Indeed, by using higher-order functions, ordered list traversals such as foldl and foldr can be expressed as unordered reductions. Based on this observation, a set of optimizations have been developed for list traversals in the parallel Haskell (pH) compiler[12]. These optimizations are inspired by, and partially subsume, earlier work on the optimization of sequential list traversal. 1 Introduction Lists are a basic computational "glue" in many functional languages. They are easily expressed and understood by programmers, and offer a compact notation for representing collections of data. The functional language Haskell [7] is no exception to this rule, and in fact encourages or even requires the use of lists to express certain sorts of computation. Functional languages also encourage a compositional coding style. This causes lists to be used extensively as intermediate da...
Functional Pearl -- Derivation of a Carry Lookahead Addition Circuit
, 2001
"... Using Haskell as a digital circuit description language, we transform a ripple carry adder that requires O(n) time to add two n-bit words into an efficient carry lookahead adder that requires O(log n) time. The gain in speed relies on the use of parallel scan to calculate the propagation of carry bi ..."
Abstract
- Add to MetaCart
Using Haskell as a digital circuit description language, we transform a ripple carry adder that requires O(n) time to add two n-bit words into an efficient carry lookahead adder that requires O(log n) time. The gain in speed relies on the use of parallel scan to calculate the propagation of carry bits efficiently. The main difficulty is that this scan cannot be parallelised directly since it is applied to a non-associative function. Several additional techniques are needed to circumvent the problem, including partial evaluation and symbolic function representation. The derivation given here provides a formal correctness proof, yet it also makes the solution more intuitive by bringing out explicitly each of the ideas underlying the carry lookahead adder.

