On Thu, Oct 22, 2009 at 02:35, Sturla Molden
Robert Kern skrev:
No, I think you're right. Using "SIMD" to refer to numpy-like operations is an abuse of the term not supported by any outside community that I am aware of. Everyone else uses "SIMD" to describe hardware instructions, not the application of a single syntactical element of a high level language to a non-trivial data structure containing lots of atomic data elements.
Then you should pick up a book on parallel computing.
I would be delighted to see a reference to one that refers to a high level language's API as SIMD. Please point one out to me. It's certainly not any of the ones I have available to me.
It is common to differentiate between four classes of computers: SISD, MISD, SIMD, and MIMD machines.
A SISD system is the classical von Neuman machine. A MISD system is a pipelined von Neuman machine, for example the x86 processor.
A SIMD system is one that has one CPU dedicated to control, and a large collection of subordinate ALUs for computation. Each ALU has a small amount of private memory. The IBM Cell processor is the typical SIMD machine.
A special class of SIMD machines are the so-called "vector machines", of which the most famous is the Cray C90. The MMX and SSE instructions in Intel Pentium processors are an example of vector instructions. Some computer scientists regard vector machines a subtype of MISD systems, orthogonal to piplines, because there are no subordinate ALUs with private memory.
MIMD systems multiple independent CPUs. MIMD systems comes in two categories: shared-memory processors (SMP) and distributed-memory machines (also called cluster computers). The dual- and quad-core x86 processors are shared-memory MIMD machines.
Many people associate the word SIMD with SSE due to Intel marketing. But to the extent that vector machines are MISD orthogonal to piplined von Neuman machines, SSE cannot be called SIMD.
That's a fair point, but unrelated to whether or not numpy can be labeled SIMD. These all refer to hardware.
NumPy is a software simulated vector machine, usually executed on MISD hardware. To the extent that vector machines (such as SSE and C90) are SIMD, we must call NumPy an object-oriented SIMD library.
numpy does not "simulate" anything. It is an object-oriented library. If numpy could be said to "simulate" a vector machine, than just about any object-oriented library that overloads operators could. It creates a false equivalence between numpy and software that actually does simulate hardware. -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco