Skip to main navigation Skip to search Skip to main content

Optimizing aggregate array computations in loops

  • IBM
  • Stony Brook University

Research output: Contribution to journalArticlepeer-review

24 Scopus citations

Abstract

An aggregate array computation is a loop that computes accumulated quantities over array elements. Such computations are common in programs that use arrays, and the array elements involved in such computations often overlap, especially across iterations of loops, resulting in significant redundancy in the overall computations. This article presents a method and algorithms that eliminate such overlapping aggregate array redundancies and shows analytical and experimental performance improvements. The method is based on incrementalization, that is, updating the values of aggregate array computations from iteration to iteration rather than computing them from scratch in each iteration. This involves maintaining additional values not maintained in the original program. We reduce various analysis problems to solving inequality constraints on loop variables and array subscripts, and we apply results from work on array data dependence analysis. For aggregate array computations that have significant redundancy, incrementalization produces drastic speedup compared to previous optimizations; when there is little redundancy, the benefit might be offset by cache effects and other factors. Previous methods for loop optimizations of arrays do not perform incrementalization, and previous techniques for loop incrementalization do not handle arrays.

Original languageEnglish
Pages (from-to)91-125
Number of pages35
JournalACM Transactions on Programming Languages and Systems
Volume27
Issue number1
DOIs
StatePublished - Jan 2005

Keywords

  • Array dependence analysis
  • Caching intermediate results
  • Incremental computation
  • Loop optimization
  • Program transformation

Fingerprint

Dive into the research topics of 'Optimizing aggregate array computations in loops'. Together they form a unique fingerprint.

Cite this