2 ms·
> on top of vanilla code > without requiring an extra DSL Give or take some nitpicking about where a language extension stops and a DSL begins, those things a
by hansvm 2y ago
> on top of vanilla code
> without requiring an extra DSL
Give or take some nitpicking about where a language extension stops and a DSL begins, those things are the same. The only question is the syntax. The key thing the referenced paper shows is a set of composable operations (extremely nice property to have in a language).
There are other solutions. E.g., Polly [0] is capable of creating the 6-loop tiled square matrix multiplication routine from the vanilla 3-loop implementation. Much like auto-vectorization though, there are limits. E.g., if changing the scheduling also requires a change in your data representation -- like AoSoA rather than AoS or SoA to fit collocated data into a cache line -- you'll have to manually write the scheduling code as well since a vanilla loop no longer indexes the right things.
[0] https://polly.llvm.org/ https://polly.llvm.org/
- achierius 2y agoOne benefit of making a 'properly new' language is that you don't have to support old code; I've definitely seen a lot of cool optimizations dropped because while they'd help in one place, they'd blow up a loop somewhere else, and ultimately there's only so far you can go with using heuristics to make your optimization apply to one but not the other. Sometimes (e.g. taking advantage of UB) this can even be functional -- 'breaking' some pieces of non-conformant code in exchange for getting better performance elsewhere. This is especially relevant in broad-domain languages like C/C++; Linus in particular has opined multiple times against the GCC devs choosing to implement new optimizations that ended up breaking code which had been working fine in Linux for years up to that point.