Auto-parallelization at the machine level is pretty much science fiction without explicit support at the expressive level way up the abstraction stack.... Or is it?
Yep, it’s not an easy problem to solve, and people have been working on it for a long time... a google search of ‘automatic code parallelization’ will turn up a long list of stuff on it... including some interesting research papers.
In essence, the problem seems to be that it requires some level of “comprehension” by the compiler, understanding what you are trying to do, rather than simple structure analysis.
All way over my head... I just *KNOW* that I could not hand-write parallel code, even if my life depended on it.
Not over your head at all. I've already stated the problem you mention: in order for plumbing to be effective, the higher level expressive abstraction (like a language) needs to describe what eventually gets plumbed. New programming abstractions
designed to express solutions to general purpose problems in the many core domain will go a long way in speeding up innovation in the software that instructs the eventual machine instructions.