Update analysis and the efficient implementation of functional aggregates
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
On copy avoidance in single assignment languages
ICLP'93 Proceedings of the tenth international conference on logic programming on Logic programming
POSC—a partitioning and optimizing SISAL compiler
ICS '90 Proceedings of the 4th international conference on Supercomputing
Practical improvements to the construction and destruction of static single assignment form
Software—Practice & Experience
The aggregate update problem in functional programming systems
POPL '85 Proceedings of the 12th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Compile-time memory reuse in logic programming languages through update in place
ACM Transactions on Programming Languages and Systems (TOPLAS)
Fast copy coalescing and live-range identification
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Efficient implementation of aggregates in united functions and objects
ACM-SE 33 Proceedings of the 33rd annual on Southeast regional conference
Proceedings of the 13th ACM SIGPLAN/SIGBED International Conference on Languages, Compilers, Tools and Theory for Embedded Systems
PolyGLoT: a polyhedral loop transformation framework for a graphical dataflow language
CC'13 Proceedings of the 22nd international conference on Compiler Construction
Hi-index | 0.00 |
Single-assignment languages with copy semantics have a very simple and approachable programming model. A naïve implementation of the copy semantics that copies the result of every computation to a new location, can result in poor performance. Whereas, an implementation that keeps the results in the same location, when possible, can achieve much higher performance. In this paper, we present a greedy algorithm for in-place computation of aggregate (array and structure) variables. Our algorithm greedily picks the most profitable opportunities for in-place computation, then updates the scheduling and in-place constraints in the program graph. The algorithm runs in $O(T log T + E_W V + V^2)$ time, where T is the number of in-placeness opportunities, E W is the number of edges and V the number of computational nodes in a program graph. We evaluate the performance of the code generated by the LabVIEWTMcompiler using our algorithm against the code that performs no in-place computation at all, resulting in significant application performance improvements. We also compare the performance of the code generated by our algorithm against the commercial LabVIEW compiler that uses an ad-hoc in-placeness strategy. The results show that our algorithm matches the performance of the current LabVIEW strategy in most cases, while in some cases outperforming it significantly.