. Okay.
So now we're going to move off of vectors and talk about sort of a near cousin of
vectors, Or how you can deal, or have vector
computing, in your desktop today. So this is actually a lot of this was done
actually by Ruby Reith here at Princeton she added a lot of multimedia extensions
to the HPPA risk architecture. There's a couple of other people involved
in this, but the, she was actually pretty influential in, in dealing, to do this.
The, the idea here is that if you have a wide register, so if you're doing let's
say 64 bit additions, And you don't want to have to do 64 bit
additions, or don't actually have 64 bit data laying around, you could cut it in
half and do two 32 bit operations at the same time,
Or you can use that same ALU and try and do four sixteen bits,
Or eight 8-bit operations. So, this is called SIMDy, or Single
Instruction, Multiple Data, so you have, Or short SIMDy instructions here, cuz
typically the, the vector length is pretty short,
Or multimedia extensions. And you have an instruction which says, I
want to do two 32-bit ads, we'll say, at the same time.
This is was popularized in x86 at least by, MMX was the first, first
implementation of this. And it's, it's sort of gone on from there
to SSE, SSE3, SSE4, SSE4, and now Intel AVX.
And the differenances between mmx and all the different SSE's largely has to do with
the length of the register and how many instructions they had.
So in AVX we've gone to 256 bit registers, wider registers, and it's extensible to I
think 1,000 bit or, or 1024 bits. One thing I do want to point out about
this which is interesting is this requires changes to your data path.
If you have an adder, and you have a 32 bit add, and now you wanted to do eight,
eight bit ads, you need to cut the carry chain in seven places.
Now, that's if you have a basic adder. I guess it gets a little more complicated
if you have something like a propagate, or, a, carry look ahead adder, or
something like that, Because you may not have a simple place to
go sniff the, the carry chains. There is still some place to cut it,
But you might, your original design, you might have propagated across,
Where now, you need to cut the boundary. So, this is, this is definitely a, a
challenge. Also, for things like multiplies, if you
want to do eight, eight bit multiplies. The, the, the structure looks a little bit
different there. But the, some of these, the big insight
here, is, you had that logic anyway. You're just effectively adding muxes on
the carry chains to the, the, the data path.
And some operations you don't even need to add.
Obviously if you're operating on something like eight, eight bit values, you want to
do the logical or of them. You don't need to add a special
instruction for that. From a implementation perspective, this is
what I was trying to get at here. You can, you've independent ad's going on, and they
all happen in parallel So why, why do we like multimedia extensions, or these
vector instructions or short vector instructions?
And let's compare them to our big vector machines.
So, one of the major differences is that you can't control the vector length.
The vector length is the way the length of the, the native data word or the length of
the instruction set. So, or the length, the length of the
native data type for your instruction set. And,
Strided, scatter-gather, these other operations are hard to do,
Because typically you just have a single load in store.
And you use the processor's load and storing instructions.
Because the processor doesn't care. It's just like the same way that unary
operations or logical operations don't need special instructions to do short
vector, or single instruction multiple data operations.
You don't need special instructions for SIM D data to be able to do loads and
stores. You just load the data.
And store the data. This is actually starting to change a
little bit. Some of the new versions of SSE actually
do have some, scatter-gather modifications.
It's a, it's a little bit harder if you think about it because you can't hold a
full address if you will, in a vector. So it's not like you can actually do sort
of index of addressing, Index of addresses because you can't
necessarily hold the full address in there.
But, in essence, they've sort of come up with some way to do, scatter and gather
operations. Couple things about having the vector
register length being limited, is that you can't do as much work in one operation.
So, you can't necessarily do a 64 operations in one instruction, like we did
with our vector length of 64. So that's just, that just is a, is a
problem. And, and unfortunately, what happens here
is you end up having to do more operations and issue more instructions.
And you're effectively increasing the bandwidth out of your fetch, unit.
So it's not, it's not, not as, not as good.
And finally, I just wanted to say we're, that processors are starting to move, that
these multimedia extensions are starting to move a little bit towards vector
processors. as they add more rich instruction sets.
So, as we get to SSC4 for instance, or SSC4.2, there's more instructions in there
and X 86 that can do fancier things. And the vector length is even getting,
getting longer, up to 124 bits. Or excuse me 1024 bits.