Results 1 
6 of
6
Parallel Programming Using Skeleton Functions
, 1993
"... Programming parallel machines is notoriously difficult. Factors contributing to this difficulty include the complexity of concurrency, the effect of resource allocation on performance and the current diversity of parallel machine models. The net result is that effective portability, which depends ..."
Abstract

Cited by 166 (7 self)
 Add to MetaCart
(Show Context)
Programming parallel machines is notoriously difficult. Factors contributing to this difficulty include the complexity of concurrency, the effect of resource allocation on performance and the current diversity of parallel machine models. The net result is that effective portability, which depends crucially on the predictability of performance, has been lost. Functional programming languages have been put forward as solutions to these problems, because of the availability of implicit parallelism. However, performance will be generally poor unless the issue of resource allocation is addressed explicitly, diminishing the advantage of using a functional language in the first place. We present a methodology which is a compromise between the extremes of explicit imperative programming and implicit functional programming. We use a repertoire of higherorder parallel forms, skeletons, as the basic building blocks for parallel implementations and provide program transformations wh...
The Many Disguises of Accumulation
, 1991
"... Several descriptions of basically one transformation technique, viz. accumulation, are compared. Their basis, viz. the associativity and the existence of a neutral element inherent in a monoid, is identified. Keywords transformational programming, factorial, fast reverse, accumulation, continuation ..."
Abstract

Cited by 7 (0 self)
 Add to MetaCart
Several descriptions of basically one transformation technique, viz. accumulation, are compared. Their basis, viz. the associativity and the existence of a neutral element inherent in a monoid, is identified. Keywords transformational programming, factorial, fast reverse, accumulation, continuations, lambda abstraction, generalisation, tail recursion, implementation of lists. This research has been sponsored by the Netherlands Organisation for Scientific Research (NWO), under grant NF 63/62518 (the STOP  Specification and Transformation Of Programs  project). 1 Introduction One of the first program transformations that appeared in the literature was the accumulation transformation. The transformation is now classic, although not everyone may know it under exactly this name. In this note, I try to relate several descriptions of this program transformation technique. In a purely algebraic view, it is the exploitation of the properties of a monoid. In literature, it can be fou...
Transformational Derivation of (parallel) Programs Using Skeletons
 Katholieke Universiteit Nijmegen
"... We describe a framework for the derivation of programs for arbitrary (in particular, parallel) architectures, motivated by a generalization of the derivation process for sequential algorithms. The central concept in this approach is that of a skeleton: on the one hand, a higherorder function for ta ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
We describe a framework for the derivation of programs for arbitrary (in particular, parallel) architectures, motivated by a generalization of the derivation process for sequential algorithms. The central concept in this approach is that of a skeleton: on the one hand, a higherorder function for targeting transformational derivations at, on the other hand representing an elementary computation on the architecture aimed at. Skeletons thus form a basis for intermediate languages, that can be implemented once and for all, as a process separate from individual program developments. The available knowledge on the derivation of (higherorder) functional programs can be used for deriving parallel ones. This paper presents an overview of the method, illustrated with an example (trapezoidal rule on SIMD processor array), and ideas for future research. 1 Introduction and overview The introduction of various computer networks and parallel computers in recent years has led to a large increase in...
A Formal Derivation of a Parallel Binary Addition Circuit
"... Formal equational reasoning is used to derive a binary addition circuit using a parallel tree topology from first principles: mathematical addition of natural numbers and the binary representation. The formalism is used to elucidate the main steps in the derivation: partial evaluation creates propa ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
Formal equational reasoning is used to derive a binary addition circuit using a parallel tree topology from first principles: mathematical addition of natural numbers and the binary representation. The formalism is used to elucidate the main steps in the derivation: partial evaluation creates propagation functions before carry values are available, finite symbols represent the propagation functions introduced by step 1, and the parallel tree scan algorithm improves the time complexity from \Theta (N) to \Theta (log N). The final result is a precise circuit specification using standard combinational logic gates.
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 nbit 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 nbit 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 nonassociative 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.