Architecture – What does “issue or start an instruction” mean

Architecturecpu

From Section 2.1.3 RISC vs CISC from Structured Computer Organization by Tanenbaum,

While the initial emphasis was on simple instructions that could be
executed quickly, it was soon realized that designing instructions that could be issued (started) quickly was the key to good
performance. How long an instruction actually took mattered less
than how many could be started per second.

  • what does "issue or start an instruction" mean? Does it refer to step 1, 2, 3, 4 and 5 in the fetch-decode-execute cycle?

  • Does "execute an instruction" mean only step 6 in the fetch-decode-execute cycle ?

Thanks.


Note:

The CPU executes each instruction in a series of small steps. Roughly
speaking, the steps are as follows:

  1. Fetch the next instruction from memory into the instruction register.
  2. Change the program counter to point to the following instruction.
  3. Determine the type of instruction just fetched.
  4. If the instruction uses a word in memory, determine where it is.
  5. Fetch the word, if needed, into a CPU register.
  6. Execute the instruction.
  7. Go to step 1 to begin executing the following instruction.

This sequence of steps is frequently referred to as the
fetch-decode-execute cycle.

Best Answer

It probably refers to pipelining, that is, parallel (or semi-parallel) execution of instructions. That's the only scenario I can think of where it does not really matter how long something takes, as long as you can have enough of them running in parallel.

So, the CPU may fetch one instruction, (step 1 in the table above,) and then as soon as it proceeds to step 2 for that instruction, it can at the same time (in parallel) start with step 1 for the next instruction, and so on.

Let's call our two consecutive instructions A and B. So, the CPU executes step 1 (fetch) for instruction A. Now, when the CPU proceeds to step 2 for instruction A, it cannot yet start with step 1 for instruction B, because the program counter has not advanced yet. So, it has to wait until it has reached step 3 for instruction A before it can get started with step 1 for instruction B. This is the time it takes to start another instruction, and we want to keep this at a minimum, (start instructions as quickly as possible,) so that we can be executing in parallel as many instructions as possible.

CISC architectures have instructions of varying lengths: some instructions are only one byte long, others are two bytes long, and yet others are several bytes long. This does not make it easy to increment the program counter immediately after fetching one instruction, because the instruction has to be decoded to a certain degree in order to figure out many bytes long it is. On the other hand, one of the primary characteristics of RISC architectures is that all instructions have the same length, so the program counter can be incremented immediately after fetching instruction A, meaning that the fetching of instruction B can begin immediately afterwards. That's what the author means by starting instructions quickly, and that's what increases the number of instructions that can be executed per second.

In the above table, step 2 says "Change the program counter to point to the following instruction" and step 3 says "Determine the type of instruction just fetched." These two steps can be in that order only on RISC machines. On CISC machines, you have to determine the type of instruction just fetched before you can change the program counter, so step 2 has to wait. This means that on CISC machines the next instruction cannot be started as quickly as it can be started on a RISC machine.