Halide: a language for image processing and computational photography
halide-lang.org
halide-lang.org
Diderot is very different from Halide though. I think Halide is for processing image data, while Diderot's interface is a much higher level of abstraction (program are written in terms of tensor fields, which Diderot then reconstructs from image data).
also, fragment shader seems to be already a computational photography language.
GPUs do not have the smart prefetching of CPUs, and making sure your cores are correctly fed is very difficult, yet paramount. This is really tricky in staged pipelines: do you compute each step in parallel for minimizing the number of instruction done, or do you inline steps for each pixel in order to avoid going to memory? The answer is often a carefully tuned mix of the two will get you a 10x improvement. This improvement being highly dependent on the underlying hardware.
The execution is really a moving part that is independent from the logic, and compilers do not have sufficient information to provide the right execution plan. Halide comes in and makes both the logic and execution plan first class citizens.