Buffer sizing for self-timed stream programs on heterogeneous distributed memory multiprocessors
Document typeConference report
Rights accessRestricted access - publisher's policy
Stream programming is a promising way to expose concurrency to the compiler. A stream program is built from kernels that communicate only via point-to-point streams. The stream compiler statically allocates these kernels to processors, applying blocking, fission and fusion transformations. The compiler determines the sizes of the communication buffers, which affects performance since local memories can be small. In this paper, we propose a feedback-directed algorithm that determines the size of each communication buffer, based on i) the stream program that has been mapped onto processors, ii) feedback from an earlier execution, and iii) the memory constraints. The algorithm exposes a trade-off between throughput and latency. It is general, in that it applies to stream programs with unstructured stream graphs, and it supports variable execution times and communication rates. We show results for the StreamIt benchmarks and random graphs. For the StreamIt benchmarks, throughput is optimal after the first iteration. For random graphs with stochastic computation times, throughput is within 3% of optimal after four iterations. Compared with the previous general algorithm, by Basten and Hoogerbrugge, our algorithm has significantly better performance and latency.
CitationCarpenter, P.; Alex Ramirez; Ayguade, E. Buffer sizing for self-timed stream programs on heterogeneous distributed memory multiprocessors. A: International Conference on High Performance Embedded Architectures & Compilers (HiPEAC). "HiPEAC 2010 International conference on High-Performance Embedded Architectures and Compilers". Pisa: Springer Verlag, 2010, p. 96-110.