Supercompilers for parallel and vector computers
Supercompilers for parallel and vector computers
Run-Time Parallelization and Scheduling of Loops
IEEE Transactions on Computers
A general data dependence test for dynamic, pointer-based data structures
PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
Compiler analysis of irregular memory accesses
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Automatic pool allocation for disjoint data structures
Proceedings of the 2002 workshop on Memory system performance
LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation
Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization
Hybrid analysis: static & dynamic memory reference analysis
International Journal of Parallel Programming
Automatic pool allocation: improving performance by controlling data structure layout in the heap
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
Transparent pointer compression for linked data structures
Proceedings of the 2005 workshop on Memory system performance
Macroscopic data structure analysis and optimization
Macroscopic data structure analysis and optimization
MPADS: memory-pooling-assisted data splitting
Proceedings of the 7th international symposium on Memory management
Proceedings of the 6th ACM conference on Computing frontiers
A compile/run-time environment for the automatic transformation of linked list data structures
International Journal of Parallel Programming
Automatic restructuring of linked data structures
LCPC'09 Proceedings of the 22nd international conference on Languages and Compilers for Parallel Computing
Sublimation: expanding data structures to enable data instance specific optimizations
LCPC'10 Proceedings of the 23rd international conference on Languages and compilers for parallel computing
DOJ: dynamically parallelizing object-oriented programs
Proceedings of the 17th ACM SIGPLAN symposium on Principles and Practice of Parallel Programming
Hi-index | 0.00 |
Loop optimization and parallelization have been most successful on code using arrays exclusively. Preferably, such code does not contain indirect access and has only simple, counted loops. The use of recursive data structures makes matters even worse, and optimization of such code has been less successful. Traversal of such data structures is often done using loops with data-dependent loop conditions. In this paper, we present a compiler transformation chain that transforms pointer traversal loops into counted loops operating on arrays that are indirectly accessed. We also show that this indirect access can in some cases be eliminated if the traversed data structure is reordered in memory. This results in a representation on which many existing techniques can be applied. Our system requires monitoring of actual arguments and heap data on which loop conditions depend so that preconditions for the optimized functions can be checked. Our experiments show that this overhead is small, considering the optimization opportunities the representation of the transformed code provides, and well worth the price.