Results 1 
8 of
8
MStructures: Extending a Parallel, Nonstrict, Functional Language with State
, 1991
"... Functional programs are widely appreciated for being "declarative" (algorithms are not overspecified) and implicitly parallel. However, when modeling state, both properties are compromised because the state variables must be "threaded" through most functions. Further, state "updates " may require m ..."
Abstract

Cited by 93 (6 self)
 Add to MetaCart
Functional programs are widely appreciated for being "declarative" (algorithms are not overspecified) and implicitly parallel. However, when modeling state, both properties are compromised because the state variables must be "threaded" through most functions. Further, state "updates " may require much copying. A solution is to introduce assignments, as in ML and Scheme; however, for meaningful semantics, they resort to strict, sequential evaluation. We present an alternative approach called Mstructures, which are imperative data structures with implicit synchronization. Mstructures are added to Id, a parallel nonstrict functional language. We argue that some programs with Mstructures improve on their functional counterparts in three ways: they are (1) more declarative; (2) more parallel; and (3) more storage efficient. Points (1) and (2) contradict conventional wisdom. We study two problems: histogramming a tree, and graph traversal, comparing functional and Mstructure solutions....
Dependence Flow Graphs: An Algebraic Approach to Program Dependencies
, 1991
"... The topic of intermediate languages for optimizing and parallelizing compilers has received much attention lately. In this paper, we argue that any good representation of a program must have two crucial properties: first, it must be a data structure that can be rapidly traversed to determine depende ..."
Abstract

Cited by 47 (3 self)
 Add to MetaCart
The topic of intermediate languages for optimizing and parallelizing compilers has received much attention lately. In this paper, we argue that any good representation of a program must have two crucial properties: first, it must be a data structure that can be rapidly traversed to determine dependence information, and second this representation must be a program in its own right, with a parallel, local model of execution. In this paper, we illustrate the importance of these points by examining algorithms for a standard optimization  global constant propagation. We discuss the problems in working with current representations. Then, we propose a novel representation called the dependence flow graph which has each of the properties mentioned above. We show that this representation leads to a simple algorithm, based on abstract interpretation, for solving the constant propagation problem. Our algorithm is simpler than, and as efficient as, the best known algorithms for this problem. An...
Properties of a Firstorder Functional Language with Sharing
 Theoretical Computer Science
, 1994
"... A calculus and a model for a firstorder functional language with sharing is presented. In most implementations of... ..."
Abstract

Cited by 22 (4 self)
 Add to MetaCart
A calculus and a model for a firstorder functional language with sharing is presented. In most implementations of...
Separation Constraint Partitioning  A New Algorithm for Partitioning Nonstrict Programs into Sequential Threads
 In Conference Record of the 22nd ACM SIGPLANSIGACT 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 nonstrict semantics require finegrain dynami...
Relating Graph and Term Rewriting via Böhm Models
 in Engineering, Communication and Computing 7
, 1993
"... . Dealing properly with sharing is important for expressing some of the common compiler optimizations, such as common subexpressions elimination, lifting of free expressions and removal of invariants from a loop, as sourcetosource transformations. Graph rewriting is a suitable vehicle to accommoda ..."
Abstract

Cited by 8 (4 self)
 Add to MetaCart
. Dealing properly with sharing is important for expressing some of the common compiler optimizations, such as common subexpressions elimination, lifting of free expressions and removal of invariants from a loop, as sourcetosource transformations. Graph rewriting is a suitable vehicle to accommodate these concerns. In [4] we have presented a term model for graph rewriting systems (GRSs) without interfering rules, and shown the partial correctness of the aforementioned optimizations. In this paper we define a different model for GRSs, which allows us to prove total correctness of those optimizations. Differently from [4] we will discard sharing from our observations and introduce more restrictions on the rules. We will introduce the notion of Bohm tree for GRSs, and show that in a system without interfering and nonleft linear rules (orthogonal GRSs), Bohm tree equivalence defines a congruence. Total correctness then follows in a straightforward way from showing that if a program M co...
Partitioning Nonstrict Functional Languages for Multithreaded 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 nonstrict functional language. The goal of partitioning is to generate threads as large as possible, while retaining the nonstrict 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 nonstrict functional language. The goal of partitioning is to generate threads as large as possible, while retaining the nonstrict semantics of the program. We define partitioning as a program transformation and design algorithms for basic block partitioning and interprocedural partitioning. The interprocedural 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, interprocedural analysis, nonstrict functional languages. 1 Introduction Functional programming languages can be divided into two classes: strict and nonstrict. In a nonstrict language, functions may r...
How Much Nonstrictness do Lenient Programs Require?
 In Conf. on Func. Prog. Languages and Computer Architecture
, 1995
"... Lenient languages, such as Id90, have been touted as among the best functional languages for massively parallel machines [AHN88]. Lenient evaluation combines nonstrict semantics with eager evaluation [Tra91]. Nonstrictness gives these languages more expressive power than strict semantics, while ea ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
Lenient languages, such as Id90, have been touted as among the best functional languages for massively parallel machines [AHN88]. Lenient evaluation combines nonstrict semantics with eager evaluation [Tra91]. Nonstrictness gives these languages more expressive power than strict semantics, while eager evaluation ensures the highest degree of parallelism. Unfortunately, nonstrictness incurs a large overhead, as it requires dynamic scheduling and synchronization. As a result, many powerful program analysis techniques have been developed to statically determine when nonstrictness is not required [CPJ85, Tra91, Sch94]. This paper studies a large set of lenient programs and quantifies the degree of nonstrictness they require. We identify several forms of nonstrictness, including functional, conditional, and data structure nonstrictness. Surprisingly, most Id90 programs require neither functional nor conditional nonstrictness. Many benchmark programs, however, make use of a limited fo...
Compilation of Id: a subset of Id
, 1990
"... Compilation of Id, a higherorder nonstrict functional language augmented with Istructures, is described in terms of two languages. The first language is called Kid, which is a Kernel language for Id. Kid is further translated into a language where all Kid data structures and functions are represen ..."
Abstract
 Add to MetaCart
Compilation of Id, a higherorder nonstrict functional language augmented with Istructures, is described in terms of two languages. The first language is called Kid, which is a Kernel language for Id. Kid is further translated into a language where all Kid data structures and functions are represented using only one data structure. This second language is called PTAC for Parallel Three Address Code. The operational semantics of both Kid and PTAC are presented in terms of two contextual reduction systems. Formalization of many commonly known optimizations is also presented in the contextual reduction framework. Keywords and phrases: Term Rewriting Systems, Contextual Reduction Systems, Dataflow, Functional Languages, Istructures, Compiler Optimizations. 1 Introduction We describe the compilation of Id \Gamma , a subset of the Id language, in terms of successive translations into different languages. Each of the successive languages has a precise operational semantics, which is ...