Exploiting loop-dependent stream reuse for stream processors

  • Authors:
  • Xuejun Yang;Ying Zhang;Jingling Xue;Ian Rogers;Gen Li;Guibin Wang

  • Affiliations:
  • National University of Defence Technology, ChangSha, China;National University of Defence Technology, Changsha, China;The University of New South Wales, Sydney, Australia;The University of Manchester, Manchester, United Kngdm;National University of Defence Technology, Changsha, China;National University of Defence Technology, Changsha, China

  • Venue:
  • Proceedings of the 17th international conference on Parallel architectures and compilation techniques
  • Year:
  • 2008

Quantified Score

Hi-index 0.01

Visualization

Abstract

The memory access limits the performance of stream processors. By exploiting the reuse of data held in the Stream Register File (SRF), an on-chip storage, the number of memory accesses can be reduced. In current stream compilers reuse is only attempted for simple stream references, those whose start and end are known. Compiler analysis from outside of stream processors does not directly enable the consideration of other complex stream references. In this paper we propose a transformation to automatically optimize stream programs to exploit the reuse supplied by loop-dependent stream references. The transformation is based on three results: algorithms to recognize the reuse supplied by stream references, a new abstract expression called the Stream Reuse Graph (SRG) to depict the reuse and the optimization of the SRG for the transformation. Both the reuse between whole sequences accessed by stream references and that between partial sequences are exploited in the paper. In particular, the problem of exploiting partial stream reuse does not have its parallel in the traditional data reuse exploitation setting (for scalars and arrays). Finally, we have implemented our techniques using the StreamC/KernelC compiler for Imagine. Experimental results show a resultant speedup of 1.14 to 2.54 times using a range of typical stream processing application kernels.