Итак, я недавно изучал архитектуру процессора Pipeline, в основном в контексте Y86-64. Там я только что прочитал о предсказании ветвления и о том, как в случае непредсказуемой ветки регистры Fetch, Decode и Execute Pipeline должны быть сброшены, а новая правильная инструкция ветвления должна быть обработана.
Мне было интересно если возможно на самом деле спроектировать аппаратное обеспечение, возможно, с двумя наборами конвейерных регистров, так что при получении условной инструкции он начинает обрабатывать оба результата параллельно, обновляя один набор регистров, как если бы ветвление не происходило, а другое устанавливается так, как если бы ветвление имело место.
Заметно, что проблема возникает, если одна или обе ветви в свою очередь приводят к инструкции, которая сама по себе также является командой ветвления, тогда 2 набора недостаточно. Но так как к тому моменту, когда первое условие ветвления достигнет стадии выполнения, мы будем знать, какую ветвь на самом деле выбрать, и поэтому мы можем устранить неправильную ветвь и все ее подветви. И поскольку для перехода первой команды перехода от этапа Fetch к этапу Execute потребуется 3 такта, я бы подумал, что в худшем случае нам потребуется только 2 ^ 3, то есть 8 наборов конвейерных регистров.
Помимо того, что это немного сложно реализовать с точки зрения аппаратного обеспечения, есть ли что-то не так с моим предположением, что этот подход будет работать? Или это уже делается в более сложных архитектурах, например X86-64?
Спасибо.