The program dependence graph and its use in optimization
ACM Transactions on Programming Languages and Systems (TOPLAS)
Parallel implementations of functional programming languages
The Computer Journal - Special issue on Lazy functional programming
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Static slicing in the presence of goto statements
ACM Transactions on Programming Languages and Systems (TOPLAS)
Parallelizing Subroutines in Sequential Programs
IEEE Software
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Integrating functional and imperative programming
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
Automatic partitioning and virtual scheduling for efficient parallel execution
ACM-SE 30 Proceedings of the 30th annual Southeast regional conference
Adoption and focus: practical linear types for imperative programming
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Conversion of control dependence to data dependence
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
OpenMP: parallel programming API for shared memory multiprocessors and on-chip multiprocessors
Proceedings of the 15th international symposium on System Synthesis
Conventional and Uniqueness Typing in Graph Rewrite Systems
Proceedings of the 13th Conference on Foundations of Software Technology and Theoretical Computer Science
An Overview of the PTRAN Analysis System for Multiprocessing
Proceedings of the 1st International Conference on Supercomputing
Control and data dependence for program transformations.
Control and data dependence for program transformations.
From sequential programs to multi-tier applications by program transformation
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
Functional programming languages typically minimize side effects and make the side effects that do exist explicit. This allows a compiler to easily extract task-level parallelism. Imperative languages rely on the programmer to order each operation to account for hidden side effects. An imperative compiler is not easily able to extract parallelism since it cannot always know if two operations are independent. In this paper, we introduce the concept of side-effect domains, where external API functions are declared as belonging to domains in which side-effects only affect functions with common domains. We describe techniques to use dependence graphs with the introduction of side-effect dependences to transform imperative application logic into a functional representation in which task-level parallelism can be identified.