[Numpy-discussion] Objected-oriented SIMD API for Numpy
Thu Oct 22 02:35:52 CDT 2009
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.
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
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
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.
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.
More information about the NumPy-Discussion