Halide Talk
Why Hacker News recommends it
Recommended as the clearest explanation of Halide's ideas and of scheduling for performance.
What it is
Andrew Adams, a Halide developer, presents the Halide language for image processing and tensor computation. The talk explains the separation of algorithm from schedule with illustrated examples of parallelism, locality and redundancy tradeoffs.
Recommended by 5 HN commenters across 4 different months, 2014 to 2021.
What Hacker News said
Recommends modeless · 2014-04 · on “Speed memory access by arranging data to take advantage of CPU caching”
You can see it a little bit in the blur example on the front page: the blur algorithm is described in two lines and the optimizations are described separately in the "schedule" below. In this case the schedule specifies that intermediate results should be computed in tiles of a certain size, and the whole thing is both vectorized and parallelized. The best way to understand it is probably to watch the video, which is relatively long but explains things clearly: [this video]
Recommends whos3424 · 2018-05 · on “How to write efficient matrix multiplication”
please look at [LINK] and especially [this video] they seem to open new ground in the area you are prusuing edit: if you know any other groups/ppl who practice a similar approach send them my way anyhow, it seems like the hand written assembly vs compiled code goes in to a new skirmish the age where the whole spectrum from generalcpu > asic becomes available to programmers all around bottle necks of parallelism, locality and redundancy seems to be the guiding lights hand written we'll be probably lead by the magnificent [LINK] compiler generated by halide and the like and once we got the ball rolling and more public knowledge is available probably the locked down techniques of the major supercomp
Recommends tehsauce · 2018-05 · on “How to write efficient matrix multiplication”
A really nice video with animations of various scheduling approaches for these types of linear algebra algorithms: [this video]
Recommends all2 · 2018-12 · on “Halide: a language for fast, portable computation on images and tensors”
[this video] Here is a relevant video from the creator. It has some fun illustrations to help with what its going on. /edit - letters
Recommends T-R · 2021-05 · on “Apache Arrow 4.0”
This is what I was trying to get at - using column vectors gives good cache locality and lets you use SIMD for "multiply all of these by this scalar" for each column, and then for "sum all of these" for the resulting rows. I'd imagine it could also let you optimize multiplications into things like bit-shifts with minimal overhead as well, though I have no idea if that's done in practice. Maybe only tangentially related, but I feel like this talk on Halide[0] is really illustrative of the general concepts. As others have mentioned, for some operations it can also save you from loading whole columns that aren't relevant for your transformation. The compression point in the sibling comment is d
Cites paulsutter · 2016-12 · on “Fast Fourier transform in x86 assembly”
Halide is an interesting direction for generating optimized code. By isolating algorithm from schedule, it is better able to optimize for vectorization, locality, pipelining, threading, tiling, and recomputation vs. storage. It then uses LLVM to do all the ordinary optimization. Example code: // The algorithm - no storage or order blur_x(x, y) = (input(x-1, y) + input(x, y) + input(x+1, y))/3; blur_y(x, y) = (blur_x(x, y-1) + blur_x(x, y) + blur_x(x, y+1))/3; // The schedule - defines order, locality; implies storage blur_y.tile(x, y, xi, yi, 256, 32) .vectorize(xi, 8).parallel(y); blur_x.compute_at(blur_y, x).vectorize(x, 8); Halide can auto-optimize to create schedules for specific archite
Cites Groxx · 2018-11 · on “Go 2, here we come”
Halide! That's the one I was thinking of: [this video] I'd love to find out if this could be a more generally-applicable technique, but it's fascinating regardless.