Results 1 -
2 of
2
Parallelising a Large Functional Program Or: Keeping LOLITA Busy
, 1996
"... . A parallel version of the LOLITA natural language engineering system is under construction. We believe that, at 47,000 lines of Haskell, LOLITA is the largest non-strict parallel functional program ever. In this paper we report on the ongoing parallelisation of LOLITA, which has the following ..."
Abstract
-
Cited by 9 (1 self)
- Add to MetaCart
. A parallel version of the LOLITA natural language engineering system is under construction. We believe that, at 47,000 lines of Haskell, LOLITA is the largest non-strict parallel functional program ever. In this paper we report on the ongoing parallelisation of LOLITA, which has the following interesting features common to real world applications of lazy languages: -- the code was not specifically designed for parallelism; -- laziness is essential for the efficiency in LOLITA; -- LOLITA interfaces to data structures outside the Haskell heap, using a foreign language interface; -- LOLITA was not written by those most closely involved in the parallelisation. Our expectations in parallelising the program were to achieve moderate speedups with small changes in the code. To date speedups of up to 2.4 have been achieved for LOLITA running under a realistic simulation of our 4 processor shared-memory target machine. We are currently tuning the program on the Sun SPARCserver ta...
A Monad of Imperative Streams
, 1996
"... A new approach is presented for performing concurrent I/O in a functional programming language. A new monad St is introduced which generalizes Haskell's IO monad: A value of type St a represents an imperative program which, at certain times during its execution, will produce a value of type a. In c ..."
Abstract
- Add to MetaCart
A new approach is presented for performing concurrent I/O in a functional programming language. A new monad St is introduced which generalizes Haskell's IO monad: A value of type St a represents an imperative program which, at certain times during its execution, will produce a value of type a. In contrast, a value of type IO a represents an imperative program which, at the end of its execution, will produce a value of type a. Not only may values of type St a be used to represent imperative commands, they also serve to create so-called imperative streams. The computer's physical input devices are represented as primitive streams. Composite streams may be constructed and interleaved in a non-preemptive way using, for instance, the monad's bind operation. By way of a series of example programs, the usage of imperative streams is illustrated. Moreover, an implementation in terms of the IO monad is given that is suitable for executing the example programs on the Gofer interpreter. An exte...

