the reason is that there does not exist a compiler that can hit roofline every single time on some high level abstracted kernel dsl.
Thus, users are forced to increasingly write more low level code / invent new DSLs to do more of the compiler’s job by hand.
i think it's more to do with people working on stuff parallelly and no one is releasing early, so everyone ends up launching new stuff in similar timeline and can't re-use each other work.
And also choices that are optimized for their own benefits