• Documents
  • Authors
  • Tables
  • Other Seers ▼
    RefSeer AckSeer CollabSeer SeerSeer
  • Log in
  • Sign up
  • MetaCart

CiteSeerX logo

Advanced Search Include Citations
Advanced Search Include Citations | Disambiguate

Implicit and explicit parallel programming in Haskell (1993)

by M P Jones, P Hudak
Add To MetaCart

Tools

Sorted by:
Results 1 - 10 of 21
Next 10 →

Composing Monads

by Mark P. Jones, Luc Duponcheel , 1993
"... Monads are becoming an increasingly important tool for functional programming. Different monads can be used to model a wide range of programming language features. However, real programs typically require a combination of different features, so it is important to have techniques for combining severa ..."
Abstract - Cited by 64 (4 self) - Add to MetaCart
Monads are becoming an increasingly important tool for functional programming. Different monads can be used to model a wide range of programming language features. However, real programs typically require a combination of different features, so it is important to have techniques for combining several features in a single monad. In practice, it is usually possible to construct a monad that supports some specific combination of features. However, the techniques used are typically ad-hoc and it is very difficult to find general techniques for combining arbitrary monads. This report gives three general constructions for the composition of monads, each of which depends on the existence of an auxiliary function linking the monad structures of the components. In each case, we establish a set of laws that the auxiliary function must satisfy to ensure that the composition is itself a monad. Using the notation of constructor classes, we describe some specific applications of these constructions. These results are used in the development of a simple expression evaluator that combines exceptions, output and an environment of variable bindings using a composition of three corresponding monads. 1

Algorithm + Strategy = Parallelism

by P.W. Trinder, K. Hammond, H.-W. Loidl, S.L. Peyton Jones - JOURNAL OF FUNCTIONAL PROGRAMMING , 1998
"... The process of writing large parallel programs is complicated by the need to specify both the parallel behaviour of the program and the algorithm that is to be used to compute its result. This paper introduces evaluation strategies, lazy higher-order functions that control the parallel evaluation of ..."
Abstract - Cited by 51 (18 self) - Add to MetaCart
The process of writing large parallel programs is complicated by the need to specify both the parallel behaviour of the program and the algorithm that is to be used to compute its result. This paper introduces evaluation strategies, lazy higher-order functions that control the parallel evaluation of non-strict functional languages. Using evaluation strategies, it is possible to achieve a clean separation between algorithmic and behavioural code. The result is enhanced clarity and shorter parallel programs. Evaluation strategies are a very general concept: this paper shows how they can be used to model a wide range of commonly used programming paradigms, including divideand -conquer, pipeline parallelism, producer/consumer parallelism, and data-oriented parallelism. Because they are based on unrestricted higher-order functions, they can also capture irregular parallel structures. Evaluation strategies are not just of theoretical interest: they have evolved out of our experience in parallelising several large-scale applications, where they have proved invaluable in helping to manage the complexities of parallel behaviour. These applications are described in detail here. The largest application we have studied to date, Lolita, is a 60,000 line natural language parser. Initial results show that for these applications we can achieve acceptable parallel performance, while incurring minimal overhead for using evaluation strategies.

Gadgets: Lazy Functional Components for Graphical User Interfaces

by Rob Noble, Colin Runciman , 1995
"... . We describe a process extension to a lazy functional programming system, intended for applications with graphical user interfaces (GUIs). In the extended language, dynamically-created processes communicate by asynchronous message passing. We illustrate the use of the language, including as an exte ..."
Abstract - Cited by 26 (0 self) - Add to MetaCart
. We describe a process extension to a lazy functional programming system, intended for applications with graphical user interfaces (GUIs). In the extended language, dynamically-created processes communicate by asynchronous message passing. We illustrate the use of the language, including as an extended example a simple board game in which squares are implemented as concurrent processes. We also describe a window manager, itself implemented in the extended functional language. Keywords: functional language, processes, concurrency, window manager, Gofer. 1 Introduction and Motivation Most of the time, elements of a graphical user interface (GUI) operate independently. For example, a menu doesn't interact with the rest of the program until the user selects an option. The user can highlight options, open up further menus or move the menu around the screen, all without doing anything that should concern any other element of the program. Popular languages such as C do not readily lend the...

Implicitlythreaded parallelism in Manticore

by Matthew Fluet, Mike Rainey, Adam Shaw - In ICFP ’08 , 2008
"... The increasing availability of commodity multicore processors is making parallel computing available to the masses. Traditional parallel languages are largely intended for large-scale scientific computing and tend not to be well-suited to programming the applications one typically finds on a desktop ..."
Abstract - Cited by 13 (5 self) - Add to MetaCart
The increasing availability of commodity multicore processors is making parallel computing available to the masses. Traditional parallel languages are largely intended for large-scale scientific computing and tend not to be well-suited to programming the applications one typically finds on a desktop system. Thus we need new parallel-language designs that address a broader spectrum of applications. In this paper, we present Manticore, a language for building parallel applications on commodity multicore hardware including a diverse collection of parallel constructs for different granularities of work. We focus on the implicitly-threaded parallel constructs in our high-level functional language. We concentrate on those elements that distinguish our design from related ones, namely, a novel parallel binding form, a nondeterministic parallel case form, and exceptions in the presence of data parallelism. These features differentiate the present work from related work on functional data parallel language designs, which has focused largely on parallel problems with regular structure and the compiler transformations — most notably, flattening — that make such designs feasible. We describe our implementation strategies and present some detailed examples utilizing various mechanisms of our language.

A call-by-need lambda-calculus with locally bottom-avoiding choice: Context lemma and correctness of transformations

by David Sabel, Manfred Schmidt-schauß - MATHEMATICAL STRUCTURES IN COMPUTER SCIENCE , 2008
"... We present a higher-order call-by-need lambda calculus enriched with constructors, case-expressions, recursive letrec-expressions, a seq-operator for sequential evaluation and a non-deterministic operator amb that is locally bottom-avoiding. We use a small-step operational semantics in form of a sin ..."
Abstract - Cited by 12 (9 self) - Add to MetaCart
We present a higher-order call-by-need lambda calculus enriched with constructors, case-expressions, recursive letrec-expressions, a seq-operator for sequential evaluation and a non-deterministic operator amb that is locally bottom-avoiding. We use a small-step operational semantics in form of a single-step rewriting system that defines a (nondeterministic) normal order reduction. This strategy can be made fair by adding resources for bookkeeping. As equational theory we use contextual equivalence, i.e. terms are equal if plugged into any program context their termination behaviour is the same, where we use a combination of may- as well as must-convergence, which is appropriate for non-deterministic computations. We show that we can drop the fairness condition for equational reasoning, since the valid equations w.r.t. normal order reduction are the same as for fair normal order reduction. We evolve different proof tools for proving correctness of program transformations, in particular, a context lemma for may- as well as mustconvergence is proved, which restricts the number of contexts that need to be examined for proving contextual equivalence. In combination with so-called complete sets of commuting and forking diagrams we show that all the deterministic reduction rules and also some additional transformations preserve contextual equivalence.We also prove a standardisation theorem for fair normal order reduction. The structure of the ordering <= c is also analysed: Ω is not a least element, and <=c already implies contextual equivalence w.r.t. may-convergence.

Abstract Machines for Dynamic Computation

by Christopher David Walton - UNIVERSITY OF EDINBURGH , 2001
"... In this thesis we address the challenges associated with the provision of dynamic software architectures. These are systems in which programs are constructed from separately compiled units with a facility for the replacement of these units at runtime. Typical examples of applications which will bene ..."
Abstract - Cited by 9 (0 self) - Add to MetaCart
In this thesis we address the challenges associated with the provision of dynamic software architectures. These are systems in which programs are constructed from separately compiled units with a facility for the replacement of these units at runtime. Typical examples of applications which will benefit from this dynamic approach are long-lived systems in which downtime is highly undesirable, for example, web-servers, database engines, and equipment controllers. In addition, dynamic software architectures are also gaining popularity with the recent advent of wide-area Internet applications, where it is often impractical to compile a program in its entirety or begin execution in a single step. Our approach to dynamic software architectures differs from earlier attempts in that we guarantee the safety of the replacement operation. This is done by founding our techniques on the rigour of strong typing. In the first half of the thesis we take an existing static software architecture with strong typing facilities and modular program construction, namely the Standard ML platform, and equip

Towards a Declarative Language for Parallel and Concurrent Programming

by Silvia Breitinger, Rita Loogen, Yolanda Ortega-Mallén - In IFL'95, Bastad , 1995
"... We define a new language `EDEN' by extending a functional language by constructs for the explicit specification of dynamic process systems. Following Shapiro [Sha89] we distinguish transformational and reactive systems. Simple annotationlike notions for the explicit definition of processes are suffi ..."
Abstract - Cited by 7 (0 self) - Add to MetaCart
We define a new language `EDEN' by extending a functional language by constructs for the explicit specification of dynamic process systems. Following Shapiro [Sha89] we distinguish transformational and reactive systems. Simple annotationlike notions for the explicit definition of processes are sufficient to describe the class of transformational systems. For the definition of reactive systems extra-functional constructs must be introduced. We show that a concept similar to the "incomplete message principle" from concurrent logic programming is a vital and powerful mechanism for the treatment of dynamically specified communication channels. Timedependencies are handled by special nondeterministic processes. 1 Introduction Most parallel programming languages used nowadays are based on the imperative programming paradigm. In such languages synchronization of and communication between processes must be handled by the programmer on a very low level of abstraction and the verification of pr...

Explicit Message Passing for Concurrent Clean

by Pascal R. Serrarens - Proc. of Implementation of Functional Languages, IFL'98 , 1998
"... . In this paper we look at Concurrent Clean and concurrency and notice that the language has some shortcomings with respect to communication. It does not provide non-determinism, efficient multicasting and data-driven communication. A message passing extension for Concurrent Clean is proposed which ..."
Abstract - Cited by 5 (0 self) - Add to MetaCart
. In this paper we look at Concurrent Clean and concurrency and notice that the language has some shortcomings with respect to communication. It does not provide non-determinism, efficient multicasting and data-driven communication. A message passing extension for Concurrent Clean is proposed which provides efficient many-to-many communication. In contrast to other solutions, we chose to have an asynchronous system where sending and receiving do not have to occur simultaneously. We discuss design decisions with respect to concurrent evaluation and unique messages. Furthermore, we show some implementation aspects of this message passing system. 1 Introduction An important topic in computer science is concurrency. It is getting more attention nowadays with the introduction of shared memory machines, like multiPentium computers. For these systems, concurrency is often provided through a library which enables the programmer to create processes or threads and have communication between the...

A Parallel Functional Language Compiler for Message-Passing Multicomputers

by Sahalu B. Junaidu , 1998
"... The research presented in this thesis is about the design and implementation of Naira, a parallel, parallelising compiler for a rich, purely functional programming language. The source language of the compiler is a subset of Haskell 1.2. The front end of Naira is written entirely in the Haskell subs ..."
Abstract - Cited by 4 (2 self) - Add to MetaCart
The research presented in this thesis is about the design and implementation of Naira, a parallel, parallelising compiler for a rich, purely functional programming language. The source language of the compiler is a subset of Haskell 1.2. The front end of Naira is written entirely in the Haskell subset being compiled. Naira has been successfully parallelised and it is the largest successfully parallelised Haskell program having achieved good absolute speedups on a network of SUN workstations. Having the same basic structure as other production compilers of functional languages, Naira's parallelisation technology should carry forward to other functional language compilers. The back end of Naira is written in C and generates parallel code in the C language which is envisioned to be run on distributed-memory machines. The code generator is based on a novel compilation scheme specified using a restricted form of Milner's ß-calculus which achieves asynchronous communication. We present the f...

Concurrency in Functional and Logic Programming

by Silvia Breitinger, Rita Loogen , 1995
"... This paper gives an overview of the main streams of research on concurrency in declarative languages and motivates the definition of the new concurrent functional language EDEN. Proceeding from the premise that parallelism should be expressed explicitly we have equipped the language with an explicit ..."
Abstract - Cited by 3 (0 self) - Add to MetaCart
This paper gives an overview of the main streams of research on concurrency in declarative languages and motivates the definition of the new concurrent functional language EDEN. Proceeding from the premise that parallelism should be expressed explicitly we have equipped the language with an explicit representation of processes and process abstractions. It is based on a lazy functional language and offers dynamic creation of processes and communication channels and a safe treatment of nondeterminism. 1. Introduction and Terminology Today the majority of parallel programs is written in imperative languages. This programming paradigm forces the programmer to use low-level constructs for synchronization and interprocess communication and it offers no support for the verification of programs. In contrast to imperative languages, declarative languages have the advantage that programs are able to retain parallelism inherent in the problem specification. Functional and logic programs can be ...
The National Science Foundation
  • About CiteSeerX
  • Submit Documents
  • Privacy Policy
  • Help
  • Data
  • Source
  • Contact Us

Developed at and hosted by The College of Information Sciences and Technology

© 2007-2010 The Pennsylvania State University