% fortune -ae paul murphy

A speculation about parallelism

If I tell you that:

a1x1+ a2x2 + a3x3 = 0
b1x1+ b2x2 + b3x3 = 0
c1x1+ c2x2 + c3x3 = 0

What's the order of execution you apply to understand the information?

Right, there isn't one - the information is spread equally across all the parts of the thing and is read serially but comprehended as one thing.

Now if we write a computer program to solve this thing for some (a,b,c) that program will be inherently serial - with parallel execution for the elements of the vectors aij if the co-efficients aren't scalar - and serial result assembly afterwards.

With present methods a solver for this kind of thing is naturally at its fastest when run on a CPU with an integrated array processor because there really isn't any parallel computing going on - array operations are processed concurrently, but each such process is both independent of the others and serial in itself.

Similarly people argue that having a machine like a T1 UltraSPARC handle 21 concurrent Sybase Engines represents parallel computing, but I think it's fairer to describe that kind of thing as concurrent processing because the threads involved are pretty much independent and completion time for a particular query depends only indirectly on the completion of other threads.

To get past this what I think we need is a way to develop code and hardware that fully represents the solutions in all of its parts.

This is a very difficult idea to expresss - let me try an analogy. Suppose you agreed that a serial computing process is like a ball rolling down a pipe - you put parameter values in at the top and bit later your answers roll out the bottom. Notice that if the pipe were made of transparent stuff you could follow the data as it rolled down the pipe and see, even if the ball breaks up into bits for part of the trip, exactly where each step happens as it morphs into your answer. In terms of that analogy what I'm suggesting is that we need a pipe from which we can read the answer anywhere we look at it, and in which multiple concurrent observers looking at different locations in the pipe would always see the same ball.

Three languages, or computing environments, that I know of do a bit of this. Thus both Maple and Mathematica support direct symbolic manipulation - you could enter the matrix above, for example, and use its determinant as an intermediate result in the development of a formula representing some relationship without giving the thing explicit value.

APL does that too - but goes simualtaneously one step further and one step less because the program itself does indeed represent the general solution, but it acquires reality only when processed all the way through with some set of inputs.

What's needed, however, is something that I have no idea how to do - and don't think any computing environments today even attempt - which is the simualtaneous availability of all information across the entire system.


Paul Murphy wrote and published The Unix Guide to Defenestration. Murphy is a 25-year veteran of the I.T. consulting industry, specializing in Unix and Unix-related management issues.