Premium
ImageCL: Language and source‐to‐source compiler for performance portability, load balancing, and scalability prediction on heterogeneous systems
Author(s) -
Falch Thomas L.,
Elster Anne C.
Publication year - 2017
Publication title -
concurrency and computation: practice and experience
Language(s) - English
Resource type - Journals
SCImago Journal Rank - 0.309
H-Index - 67
eISSN - 1532-0634
pISSN - 1532-0626
DOI - 10.1002/cpe.4384
Subject(s) - computer science , compiler , software portability , scalability , source code , parallel computing , overhead (engineering) , oracle , optimizing compiler , stencil , load balancing (electrical power) , distributed computing , operating system , programming language , computational science , geometry , mathematics , grid
Summary 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.57×. 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.