Efficient Image Processing with Halide
-
Upload
adrian-palacios-corella -
Category
Technology
-
view
1.061 -
download
3
Transcript of Efficient Image Processing with Halide
Efficient Image Processing with Halide Presented by Adrián Palacios
Introduction
• Image processing is a topic where optimization matters.
• But optimization for multiple platforms is hard and expensive.
• We want tools for obtaining high-performance code regardless of the platform.
• Halide is a tool that aims to solve this problem.
Data-parallel and IP languages
• Data-parallel languages: • CUDA and OpenCL propose a SIMD
programming model for multi-core CPUs and GPUs.
• Implementations can be very efficient at the cost of losing portability.
• IP languages: • MATLAB and other suites release kernel
languages.
• But individual kernels are not enough.
Concretely, the problem is…
And the solution is…
The Halide language
• Halide is a functional programming language (“à la Haskell”) for IP.
• It makes a distinction between the algorithm and the schedule:
• The algorithm is what should be done.
• The schedule is how it should be done.
• Optimization is achieved by:
• Using LLVM for generating simple code.
• Using architecture-specific compilers for generating vectorized and parallel code.
Evaluation of Halide
• Halide’s execution time is measured against: • ImageMagick.
• MATLAB.
• Mathematica.
• OpenCV 2.
• Two test images: • A normal sized image (512x512).
• A big sized image (6400x4800).
• For two methods: • RGB to grayscale.
• Gaussian blur.
RGB to grayscale
RGB to grayscale results Normal sized image Time (ms) Time / Halide Time (%)
Halide 8.486 1.000
ImageMagick 64.000 7.542
MATLAB 10.359 1.221
Mathematica 13.000 1.532
OpenCV 2 0.577 0.067
Big sized image Time (ms) Time / Halide Time (%)
Halide 188.829 1.000
ImageMagick 1748 9.257
MATLAB 192.501 1.019
Mathematica 1586 8.399
OpenCV 2 76.626 0.405
Gaussian blur
Gaussian blur results Normal sized image Time (ms) Time / Halide Time (%)
Halide 2.674 1.000
ImageMagick 304.000 113.687
MATLAB 2.834 1.059
Mathematica 117.003 43.755
OpenCV 2 1.076 0.402
Big sized image Time (ms) Time / Halide Time (%)
Halide 219.274 1.000
ImageMagick 12265 55.935
MATLAB 277.388 1.265
Mathematica 199203 908.466
OpenCV 2 191.875 0.875
Conclusions
• Halide beats each other tool (except OpenCV 2).
• There’s a lot of room for improvement.
• Programming with Halide is hard-to-learn, easy-to-master.
Questions?
• Halide’s repository at Github:
• https://github.com/halide/Halide