As usual, you give me much to ponder.  For some reason it pleases that the world is not too concerned with what we happen to like.

 
But it's not true to what is *there*, and if you program for that model, you're going to get terrible performance.

I heard recently of a type system that captures the complexity of functions in their signatures.  With that information available to the machine, perhaps the machine could be equipped with a way to plan an execution such that performance is optimised.

Your day with the HPC system sounds fascinating.  Do you think that an Ada/Occam-like approach to partitioned distribution could tame the sort address space that you encountered on the day?
 
 
Any programming model that relies on large flat shared address spaces is out; message passing that copies stuff is going to be much easier to manage than passing a pointer to memory that might be powered off when you need it

But there'll still be some call for shared memory?  Or maybe only for persistence stores?

 
One of the presenters was working with a million lines of Fortran, almost all of it written by other people.  How do we make that safe?

Ultimately only proof can verify safety.  (I'm trying to address something like that in my rewrite, which given the high quality of feedback from this list, I hope to post soon.)





On 31 October 2016 at 04:07, Richard A. O'Keefe <ok@cs.otago.ac.nz> wrote:


On 31/10/16 5:44 AM, Rik Howard wrote:
thanks for the reply.  Conceptually I like the idea of a single address
space, it can then be a matter of configuration as to whether what
you're addressing is another local process, processor or something more
remote.

The world doesn't care what you or I happen to like.
I completely agree in *liking* a single address space.
But it's not true to what is *there*, and if you program for that
model, you're going to get terrible performance.

I've just been attending a 1-day introduction to our national HPC
system.  There are two clusters.  One has about 3,300 cores and
the other over 6,000.  One is POWER+AIX, the other Intel+Linux.
One has Xeon Phis (amongst other things), the other does not.
Hint: neither of them has a single address space, and while we
know about software distributed memory (indeed, one of the people
here has published innovative research in that area), it is *not*
like a single address space and is not notably easy to use.

It's possible to "tame" single address space.  When you start to
learn Ada, you *think* you're dealing with a single address space
language, until you learn about partitioning programs for
distributed execution.  For that matter, Occam has the same
property (which is one of the reasons why Occam didn't have
pointers, so that it would be *logically* a matter of indifference
whether two concurrent processors were on the same chip or not).

But even when communication is disguised as memory accessing,
it's still communication, it still *costs* like communication,
and if you want high performance, you had better *measure* it
as communication.

One of the presenters was working with a million lines of Fortran,
almost all of it written by other people.  How do we make that safe?