ImageCL: Language and source-to-source compiler for performance portability, load balancing, and scalability prediction on heterogeneous systems
Department of Computer Science,Norwegian University of Science and Technology (NTNU), Trondheim, Norway
Concurrency and Computation: Practice and Experience: e4384, 2017
DOI:10.1002/cpe.4384
@article{falch2017imagecl,
title={ImageCL: Language and source-to-source compiler for performance portability, load balancing, and scalability prediction on heterogeneous systems},
author={Falch, Thomas L and Elster, Anne C},
journal={Concurrency and Computation: Practice and Experience},
year={2017},
publisher={Wiley Online Library}
}
Applications written for heterogeneous CPU-GPU systems often suffer from poor performance portability. Finding good work partitions can also be challenging as different devices are suited for different applications. This article describes ImageCL, a high-level domain-specific language and source-to-source compiler, targeting single system as well as distributed heterogeneous hardware. Initially targeting image processing algorithms, our framework now also handles general stencil-based operations. It resembles OpenCL, but abstracts away performance optimization details which instead are handled by our source-to-source compiler. Machine learning-based auto-tuning is used to determine which optimizations to apply. For the distributed case, by measuring performance counters on a small input on one device, previously trained performance models are used to predict the throughput of the application on multiple different devices, making it possible to balance the load evenly. Models for the communication overhead are created in a similar fashion and used to predict the optimal number of nodes to use. ImageCL outperforms other state-of-the-art solutions on image processing benchmarks in several cases, achieving speedups of up to 4.57x. On both CPUs and GPUs we are only 3% and 2% slower than an oracle for load balancing and scalability prediction, respectively, using synthetic benchmarks.
January 13, 2018 by hgpu