A programming language interface to describe transformations and code generation
School of Computing, University of Utah, Salt Lake City, UT
Languages and Compilers for Parallel Computing, Lecture Notes in Computer Science, Volume 6548/2011, 136-150, 2011
@article{rudy2011programming,
title={A programming language interface to describe transformations and code generation},
author={Rudy, G. and Khan, M. and Hall, M. and Chen, C. and Chame, J.},
journal={Languages and Compilers for Parallel Computing},
pages={136–150},
year={2011},
publisher={Springer}
}
This paper presents a programming language interface, a complete scripting language, to describe composable compiler transformations. These transformation programs can be written, shared and reused by non-expert application and library developers. From a compiler writer’s perspective, a scripting language interface permits rapid prototyping of compiler algorithms that can mix levels and compose different sequences of transformations, producing readable code as output. From a library or application developer’s perspective, the use of transformation programs permits expression of clean high-level code, and a separate description of how to map that code to architectural features, easing maintenance and porting to new architectures. We illustrate this interface in the context of CUDA-CHiLL, a source-to-source compiler transformation and code generation framework that transforms sequential loop nests to high-performance GPU code. We show how this high-level transformation and code generation language can be used to express: (1) complex transformation sequences, exemplified by a single loop restructuring construct used to generate a series of tiling and permute commands; and, (2) complex code generation sequences to produce CUDA code from a high-level specification. We demonstrate that the automatically-generated code either performs closely or outperforms two hand-tuned GPU library kernels from Nvidia’s CUBLAS 2.2 and 3.2 libraries.
December 1, 2011 by hgpu