Archive for the ‘Halide’ Category

Halide

Tuesday, November 6th, 2012

Halide – a language for image processing and computational photography

From the website:

Halide is a new programming language designed to make it easier to write high-performance image processing code on modern machines. Its current front end is an embedding in C++. Hardware targets include x86-64/SSE, ARM v7/NEON, and CUDA.

If you need a reason to learn C++, this could be it.

I first pointed to Halide at: Halide Wins Image Processing Gold Medal!.

Halide Wins Image Processing Gold Medal!

Friday, August 3rd, 2012

OK, the real title is: Decoupling Algorithms from Schedules for Easy Optimization of Image Processing Pipelines (Jonathan Ragan-Kelley, Andrew Adams, Sylvain Paris, Marc Levoy, Saman Amarasinghe, and Frédo Durand.)

And there is no image processing gold medal. (To avoid angry letters from the big O folks.)

Still, when an abstract says:

Using existing programming tools, writing high-performance image processing code requires sacrificing readability, portability, and modularity. We argue that this is a consequence of conflating what computations define the algorithm, with decisions about storage and the order of computation. We refer to these latter two concerns as the schedule, including choices of tiling, fusion, recomputation vs. storage, vectorization, and parallelism.

We propose a representation for feed-forward imaging pipelines that separates the algorithm from its schedule, enabling high-performance without sacrificing code clarity. This decoupling simplifies the algorithm specification: images and intermediate buffers become functions over an infinite integer domain, with no explicit storage or boundary conditions. Imaging pipelines are compositions of functions. Programmers separately specify scheduling strategies for the various functions composing the algorithm, which allows them to efficiently explore different optimizations without changing the algorithmic code.

We demonstrate the power of this representation by expressing a range of recent image processing applications in an embedded domain specific language called Halide, and compiling them for ARM, x86, and GPUs. Our compiler targets SIMD units, multiple cores, and complex memory hierarchies. We demonstrate that it can handle algorithms such as a camera raw pipeline, the bilateral grid, fast local Laplacian filtering, and image segmentation. The algorithms expressed in our language are both shorter and faster than state-of-the-art implementations.

Some excitement is understandable.

Expect programmers will generalize this decoupling of algorithms from storage and order.

What did Grace Slick say? “It’s a new dawn, people.”

Paper (12 MB PDF)

Code: http://halide-lang.org/