 In this video, we're going to be introducing the idea of critical path. The critical path for an instruction is the most time-consuming path through the architecture for that instruction. Most of our instructions will start over here with our program counter and they'll gradually work their way through the architecture and then back around. So for critical path, we're going to be looking at a few things. We're going to be interested in what the data path was for that instruction so we know which elements of the hardware we actually use, we actually care about. But we're also going to need to know which of these elements can operate in parallel. Some instructions, like our ALU instructions, will do most of their computation here then write stuff back. But at the same time, they also have to update the program counter. Updating the program counter turns out to be a whole lot cheaper in general than all of the ALU processing. Fortunately, those two operations can happen in parallel. There isn't any overlap between calculating the results of an ALU instruction and updating the program counter. So that means that all of the work that we need to go through to update the program counter isn't going to affect how much time it actually takes to execute this instruction. That would only be interesting if the hardware to get the next address took longer than the hardware to calculate the results of the instruction. Turns out this will be more relevant when we have a branch instruction because the branch instruction has to determine if the contents of two registers are the same. So it has to go through the main ALU workflow before it can set this multiplexer. That means that while this hardware may not take very long, actually updating the program counter will have to wait until we can set this multiplexer. So when we're working with critical path, we're really interested in two things. Which is the most time consuming part of our data path and what parts of this can be processed in parallel.