You shouldn't write "do" loops that start at the beginning and go until the
end. You should just say that you want the calculation done and that your intent is that
you have visited everything. And then of course you might have dependencies etc... but
the idea is generally, don't say how to do it, just declare what you want as a result.
Of course, it doesn't immediately match what we are used to doing: telling the
computer how we want things done; but you can't really say that you have to
tell the computer more about parallelization. It's exactly the opposite.
Well, it is not that easy. You have to include enough information intro the
program, and you have to break it down in a way that allows parallelism.
For instance, you need to tell the machine that your operators are associative
or commutative to enable optimizations and reordering.
And there seem to be approaches for instance to infer parallel solutions like
prefix-sum algorithms[1] but that is also restricted to certain applications.
Nothing general, no holly grail or silver bullet.
Best regards
Stefan
Sure sure. I was just avoiding unnecessary details from the talk ;P