Somehow, this one got lost, and just surfaced today.

It deals with one of my students reading something that is not correct.
My answer is somewhat longwinded, since I am compelled to correct the
misconceptions of the author quoted.  If you have other things on your
plate right now, you might want to save this for later.


        Dear Dr. Patt,
        I had a question about Pipelining,
        a topic you recently taught in 360N. I
        was browsing through some material about RISC and CISC
        processors when I noticed the following:

        " Even though RISC instructions can be nearly as complex as a CISC
        instruction, they suffer no loss in speed because each RISC instruction
        takes an equal number of clock cycles and hence can be pipelined. This
        results in RISC instructions being executed in parallelized fashion.
        On the other hand, CISC instructions are usually never pipelined
        because each instruction requires different execution times."

        Could you please explain the above? How does instructions taking
        equal/different execution time affect pipelining? Did I miss something
        important in the class on pipelining?

        Thanks in advance for your reply,

        <<name withheld to protect the RISC/CISC browser>>


Thank you for the message.  You don't say what you were browsing
through, so it is hard to know where the author of this quote was
coming from.  A larger problem in this day of self-appointed experts
posting their thoughts on the web is that the unsuspecting reader does
not know whether the poster has any clue whatsoever.  If it came from
a popular textbook, it is more problematical.

Be that as it may, I continue:

First, what is a RISC instruction and what is a CISC instruction is not
so clear cut.  There are a number of attributes usually associated with
RISC, but how many attributes are necessary before the instruction qualifies
as RISC.  The group that coined the term RISC insisted the instructions
be simple, and each took one cycle of execution time.  This was later
disavowed by those that felt it meant exposing the lowest level of control
to the compiler.  Next, it was supposed to mean instructions that can be
executed via a short pipeline.  And so on.  If 360N was a two-semester
course, I would spend a lecture on the RISC/CISC discussion.  I will
probably do so in 382N in the Spring and you are welcome to come and
listen, if you are not taking the course.

RISC instructions all take an equal number of cycles.  FALSE.  Simplest
example was the Alpha ISA.  Even the first implementation (1991) had some
instructions taking 7 cycles, floating point instructions took 11 cycles, etc.

CISC instructions are usually never pipelined.  FALSE.  The most common
"CISC" ISA today (the x86) is heavily pipelined.  In fact, all implementations
these days are pipelined.

You ask how equal/different execution times affect pipelining.  The author
who you quote apparently does not understand out-of-order execution.  In the
days when every implementation was an in-order execution machine, one would
like the instructions to flow through the pipeline uniformly.  If an
instruction took too many stages, some thought it would clog up the pipeline
and prevent following instructions from flowing nicely.  But they were wrong.

Even the first Alpha chip which processed instructions in-order had varying
length instructions.  It handled it by having the first four stages in common,
followed by a quatrification (my own invention!), where the instruction
went to one of four places, depending on the nature of the instruction.
From each of the four places, four separate pipelines continued.

More important is the notion of out-of-order execution, where you recall
my pipeline diagram with two hiccups, one for the reservation stations and
one for the retirement structure.  Instructions, whether they be RISC or
CISC, whatever that distinction really is, flow through the front end in-order.
Then they sit in the reservation stations until their operands are ready.
Then they get shipped to functional units (sometimes pipelined) which take
as many cycles as necessary, and then they get shipped to the retirement
structure until they can be retired in-order.  Thus, the number of stages
an instruction requires has nothing to do with the usefulness of the pipeline.
Out-of-order execution allows easy accomodation to execution by a pipeline.

Sorry for the long answer.  But given what you read, I felt I needed to
correct it, and I don't have time to correct it in a shorter write up.

Good luck with the rest of the course.

Yale Patt