What is the reorder buffer?
It is a buffer which is used to ensure that instructions commit in-order. It is also used in one method of register renaming. There is one entry for every active instruction. An instruction is active after it has been dispatched and before it has been committed. A reorder buffer is a circular FIFO queue, meaning it has a head pointer and a tail pointer which can wrap around once they have hit the end of the buffer, and entries are removed in the order they are added. When an instruction is dispatched, an entry for it is placed in the reorder buffer where the tail is pointing (and the tail pointer is incremented to the next entry address). When an instruction is being pointed to by the head pointer and the instruction has completed execution, it is committed and the head pointer is incremented to the next entry address.
Can a superscalar processor have in-order execution?
Yes. If sequential instructions are being executed in parallel, it is still considered to be in-order execution.
I also added the following unanswered questions to my research list:
- What does "dynamically encountered" mean regarding memory operations in the dynamical reordering process of a processor?
- Where is the active instruction window?
- Can a processor have out-of-order execution and in-order completion?
One of our community members and moderators, Acaceol, created a rather cool IRC-based project tracking system. I am currently using it to track the various projects and tasks I have to do, and the best part is that anyone can check up on the current status of development/research by simply joining our online chat room located at http://irc.ifthensoftware.net and either asking the project management system for the current status or watching as we update it throughout the day. This will allow you to keep up-to-date on exactly what is being worked on, including how much time has been spent on the various tasks and projects!