Results 1 -
4 of
4
Separation Constraint Partitioning - A New Algorithm for Partitioning Non-strict Programs into Sequential Threads
- In Conference Record of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
, 1995
"... In this paper we present substantially improved thread partitioning algorithms for modern implicitly parallel languages. We present a new block partitioning algorithm, separation constraint partitioning, which is both more powerful and more flexible than previous algorithms. Our algorithm is guarant ..."
Abstract
-
Cited by 19 (1 self)
- Add to MetaCart
In this paper we present substantially improved thread partitioning algorithms for modern implicitly parallel languages. We present a new block partitioning algorithm, separation constraint partitioning, which is both more powerful and more flexible than previous algorithms. Our algorithm is guaranteed to derive maximal threads. We present a theoretical framework for proving the correctness of our partitioning approach, and we show how separation constraint partitioning makes interprocedural partitioning viable. We have implemented the partitioning algorithms in an Id90 compiler for workstations and parallel machines. Using this experimental platform, we quantify the effectiveness of different partitioning schemes on whole applications. 1 Introduction Modern implicitly parallel languages, such as the functional language Id90, allow the elegant formulation of a broad class of problems while exposing substantial parallelism. However, their non-strict semantics require fine-grain dynami...
Partitioning Non-strict Functional Languages for Multi-threaded Code Generation
- In Proceedings of Static Analysis Symposium '95
, 1995
"... In this paper, we present a new approach to partitioning, the problem of generating sequential threads for programs written in a non-strict functional language. The goal of partitioning is to generate threads as large as possible, while retaining the non-strict semantics of the program. We define p ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
In this paper, we present a new approach to partitioning, the problem of generating sequential threads for programs written in a non-strict functional language. The goal of partitioning is to generate threads as large as possible, while retaining the non-strict semantics of the program. We define partitioning as a program transformation and design algorithms for basic block partitioning and inter-procedural partitioning. The inter-procedural algorithm presented here is more powerful than the ones previously known and is based on abstract interpretation, enabling the algorithm to handle recursion in a straightforward manner. We prove the correctness of these algorithms in a denotational semantic framework. Keywords: Partitioning, abstract interpretation, demand and tolerance sets, inter-procedural analysis, non-strict functional languages. 1 Introduction Functional programming languages can be divided into two classes: strict and non-strict. In a non-strict language, functions may r...
Normalizing Strategies for Multithreaded Interpretation and Compilation of Non-Strict Languages
- CSG Memo 374, Computation Structures Group, MIT Laboratory for Computer Science
, 1995
"... Execution of programs written in non-strict languages such as Haskell or Id/pH require the ability to dynamically schedule multiple threads of computation. This is because the exact data dependencies among the sub-expressions (and hence their ordering) cannot be completely determined at compile-time ..."
Abstract
-
Cited by 2 (2 self)
- Add to MetaCart
Execution of programs written in non-strict languages such as Haskell or Id/pH require the ability to dynamically schedule multiple threads of computation. This is because the exact data dependencies among the sub-expressions (and hence their ordering) cannot be completely determined at compile-time. Synchronizing data structures such as I-structures and M-structures also need a multithreaded execution model because a computation that gets blocked on a synchronizing data structure can only be resumed if another computation produces that value. However, there is considerable flexibility in choosing the granularity of threads and their dynamic scheduling strategy when implementing such a multithreaded model on existing sequential and parallel platforms, leading to different trade-offs between the exposed parallelism and the resource requirements. This paper presents a formal framework for characterizing and exploring the spectrum of such trade-off points -- from purely eager, fine-grain ...
Compiling for Parallel Multithreaded Computation on Symmetric Multiprocessors
, 1998
"... Shared-memory symmetric multiprocessors (SMP's) based on conventional microprocessors are by far the most common parallel architecture today, and will continue to be so for the forseeable future. This thesis describes techniques to compile and schedule Id-S, a dialect of the implicitly parallel lang ..."
Abstract
- Add to MetaCart
Shared-memory symmetric multiprocessors (SMP's) based on conventional microprocessors are by far the most common parallel architecture today, and will continue to be so for the forseeable future. This thesis describes techniques to compile and schedule Id-S, a dialect of the implicitly parallel language Id, for execution on SMP's. We show that previous implementations of Id for conventional microprocessors incurred an overhead of at least 40-300% over an efficient sequential implementation of Id-S. We break down this overhead into various presence-tag checking and scheduling overheads. Given this overhead, we conclude that a fine-grained, element-wise synchronizing implementation of Id is not suitable for use on small-scale SMP's. We then describe a parallelization technique for Id-S that discovers both DAG and loop parallelism. Our parallelization exploits Id-S's single-assignment semantics for data structures. We show that for many programs, our technique can discover ample paralleli...

