Results 1 - 10
of
10
C Program Specialization
, 1992
"... Automatic program specialization has numerous application areas ranging from specialization of scientific computation to automatic compiler generation. During the last decade, several automatic partial evaluators have been developed and demonstrated their usefulness. However, none of these have both ..."
Abstract
-
Cited by 18 (5 self)
- Add to MetaCart
Automatic program specialization has numerous application areas ranging from specialization of scientific computation to automatic compiler generation. During the last decade, several automatic partial evaluators have been developed and demonstrated their usefulness. However, none of these have both been for a typed imperative language and self-applicable. The main content of this thesis is the development of an automatic self-applicable program specializer for a substantial subset of the C programming language. The use of an imperative language introduce many problems not present in partial evaluation of functional languages. New problems addressed and solved in this thesis includes handling of static side-effects under dynamic control, treatment of the imperative data structures arrays and structures, partially static data structures and specialization time splitting of these, and representation of values and programs for efficient self-application. In the thesis we recall the founda...
Compilation of Functional Languages Using Flow Graph Analysis
, 1994
"... syntax, and syntactic and semantic domains of a flow graph Figure 9. Semantic equations Def and Exp of a flow graph The first argument to the functions Def and Exp specifies a set of nodes that represent a flow graph, from which the element(s) of current interest are selected by pattern matching. ..."
Abstract
-
Cited by 16 (12 self)
- Add to MetaCart
syntax, and syntactic and semantic domains of a flow graph Figure 9. Semantic equations Def and Exp of a flow graph The first argument to the functions Def and Exp specifies a set of nodes that represent a flow graph, from which the element(s) of current interest are selected by pattern matching.
FCG: a Code Generator for Lazy Functional Languages
- Compiler construction (CC 92), LNCS 641
, 1992
"... The FCG code generator produces portable code that supports efficient two-space copying garbage collection. The code generator transforms the output of the FAST compiler front end into an abstract machine code. This code explicitly uses a call stack, which is accessible to the garbage collector. In ..."
Abstract
-
Cited by 13 (3 self)
- Add to MetaCart
The FCG code generator produces portable code that supports efficient two-space copying garbage collection. The code generator transforms the output of the FAST compiler front end into an abstract machine code. This code explicitly uses a call stack, which is accessible to the garbage collector. In contrast to other functional language compilers that generate assembly directly, FCG uses the C compiler for code generation, providing high-quality code optimisations and portability. To make full use of the C compiler's capabilities, FCG includes an optimisation scheme that transforms the naively generated stack-based code into a register-based equivalent form. The results for a benchmark of functional programs show that code generated by FCG performs well in comparison with the LML compiler. 1 Introduction Functional languages offer the programmer referential transparency, and increased expressiveness in comparison with ordinary imperative languages: higher order functions, lazy evaluati...
Exploring the barrier to entry — incremental generational garbage collection for Haskell
- In Int. Symp. on Memory Management
, 2004
"... We document the design and implementation of a “production” incremental garbage collector for GHC 6.02. It builds on our earlier work (Non-stop Haskell) that exploited GHC’s dynamic dispatch mechanism to hijack object code pointers so that objects in to-space automatically scavenge themselves when t ..."
Abstract
-
Cited by 8 (1 self)
- Add to MetaCart
We document the design and implementation of a “production” incremental garbage collector for GHC 6.02. It builds on our earlier work (Non-stop Haskell) that exploited GHC’s dynamic dispatch mechanism to hijack object code pointers so that objects in to-space automatically scavenge themselves when the mutator attempts to “enter ” them. This paper details various optimisations based on code specialisation that remove the dynamic space, and associated time, overheads that accompanied our earlier scheme. We detail important implementation issues and provide a detailed evaluation of a range of design alternatives in comparison with Non-stop Haskell and GHC’s current generational collector. We also show how the same code specialisation techniques can be used to eliminate the write barrier in a generational collector. Categories and Subject Descriptors: D.3.4 [Programming Languages]: Processors—Memory management (garbage collection)
Deterministic Concurrency
- In Proceedings of the 1993 Glasgow Workshop on Functional Programming
, 1993
"... Existing functional languages appear not to be suitable for implementing systems which are inherently concurrent, such as operating system environments. Adaptations to functional languages developed to support such applications have in the past always involved the introduction of non-determinism. ..."
Abstract
-
Cited by 7 (0 self)
- Add to MetaCart
Existing functional languages appear not to be suitable for implementing systems which are inherently concurrent, such as operating system environments. Adaptations to functional languages developed to support such applications have in the past always involved the introduction of non-determinism.
Non-stop Haskell
- In Proc. of the Fifth International Conference on Functional Programming
, 2000
"... We describe an ecient technique for incorporating Baker's incremental garbage collection algorithm into the Spineless Tagless G-machine on stock hardware. This algorithm eliminates the stop/go execution associated with bulk copying collection algorithms, allowing the system to place an upper bound o ..."
Abstract
-
Cited by 6 (1 self)
- Add to MetaCart
We describe an ecient technique for incorporating Baker's incremental garbage collection algorithm into the Spineless Tagless G-machine on stock hardware. This algorithm eliminates the stop/go execution associated with bulk copying collection algorithms, allowing the system to place an upper bound on the pauses due to garbage collection. The technique exploits the fact that objects are always accessed by jumping to code rather than being explicitly dereferenced. It works by modifying the entry code-pointer when an object is in the transient state of being evacuated but not scavenged. An attempt to enter it from the mutator causes the object to \self-scavenge" transparently before resetting its entry code pointer. We describe an implementation of the scheme in v4.01 of the Glasgow Haskell Compiler and report performance results obtained by executing a range of applications. These experiments show that the read barrier can be implemented in dynamic dispatching systems such as the STG-mac...
Combining Single-Space and Two-Space Compacting Garbage Collectors
- In Proceedings of the 1991 Glasgow Workshop on Functional Programming (Portree
, 1991
"... The garbage collector presented in this paper makes use of two well known compaction garbage collection algorithms with very different performance characteristics: Cheney's two-space copying collector and Jonker 's single-space sliding compaction collector. We propose a scheme which allows either co ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
The garbage collector presented in this paper makes use of two well known compaction garbage collection algorithms with very different performance characteristics: Cheney's two-space copying collector and Jonker 's single-space sliding compaction collector. We propose a scheme which allows either collector to be used. The run-time memory requirements of the program being executed are used to determine the most appropriate collector. This enables us to achieve a fast collector for heap requirements less than half of the heap memory but allows the heap utilization to increase beyond this threshold. Using these ideas we develop a particularly attractive extension to Appel's generational collector.
Using Strictness Information in the STG-machine
- In: Proceedings of the 4th International Workshop on the Parallel Implementation of Functional Programming Languagues
, 1995
"... The paper presents an attempt at exploiting strictness information for parallel evaluation of functional programs. A simple evaluation model, which uses strictness in a limited way, is suggested. It has been applied in a parallel version of the STG--machine; special attention has been paid to avoidi ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
The paper presents an attempt at exploiting strictness information for parallel evaluation of functional programs. A simple evaluation model, which uses strictness in a limited way, is suggested. It has been applied in a parallel version of the STG--machine; special attention has been paid to avoiding the creation of useless tasks. Some results from the simulation of the parallel STG--machine are provided, throwing light on the amount and granularity of parallelism. 1 Introduction Pure functional languages are in principle well suited to parallel evaluation. However, implementing them efficiently on today's highly scalable MIMD architectures is a challenging task. Only sufficiently coarse--grain parallelism is likely to be successfully utilized. Parallel implementation of nonstrict languages, in particular, presents additional problems. Care must be taken not to affect termination properties. Task creation is perhaps the most important issue in parallel implementation. Task creation d...
Cache Behaviour of Lazy Functional Programs
, 1992
"... . To deepen our quantitative understanding of the performance of lazy evaluation, we have studied the cache behaviour of a benchmark of functional programs. The compiler, based on the G-machine style of graph reduction, has been modified to insert monitoring code into the executable that records ins ..."
Abstract
- Add to MetaCart
. To deepen our quantitative understanding of the performance of lazy evaluation, we have studied the cache behaviour of a benchmark of functional programs. The compiler, based on the G-machine style of graph reduction, has been modified to insert monitoring code into the executable that records instruction and data references at run time. The resulting address trace is used to drive a cache simulator that computes statistics like miss rates and traffic ratios. A number of experiments with different cache parameters (size, associativity, etc.) shows that the benchmark programs have a strong spatial locality in their memory references. This is caused by the heap allocation strategy that allocates nodes by advancing a pointer through the heap, generating new addresses. Therefore the initialisation of new heap nodes results in cache misses, which dominate performance. Comparisons with results of other functional language implementations confirm this behaviour 1 Introduction Recently, com...
Future Work
, 1992
"... this report relies, and who has provided many helpful comments. Bibliography ..."
Abstract
- Add to MetaCart
this report relies, and who has provided many helpful comments. Bibliography

