A report on the Sisal language project
Journal of Parallel and Distributed Computing - Special issue: data-flow processing
Reform Prolog: the language and its implementation
ICLP'93 Proceedings of the tenth international conference on logic programming on Logic programming
A methodology for granularity-based control of parallelism in logic programs
Journal of Symbolic Computation - Special issue on parallel symbolic computation
Optimization schemas for parallel implementation of non-deterministic languages and systems
Software—Practice & Experience
Implementation of multilisp: Lisp on a multiprocessor
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Runtime support for multicore Haskell
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
Recently we built a system that uses profiling data to automatically parallelize Mercury programs by finding conjunctions with expensive conjuncts that can run in parallel with minimal synchronization delays. This worked very well in many cases, but in cases of tail recursion, we got much lower speedups than we expected, due to excessive memory usage. In this paper, we present a novel program transformation that eliminates this problem, and also allows recursive calls inside parallel conjunctions to take advantage of tail recursion optimization. Our benchmark results show that our new transformation greatly increases the speedups we can get from parallel Mercury programs; in one case, it changes no speedup into almost perfect speedup on four cores.