Обработка зависимости данных в трубопроводе
mov $10, %eax
add $2, %eax
mov $4, %ebx
mov $5, %ecx
add $1, %ebx
add $1, %ecx
add %ecx, %eax
add %ebx, %eax
Если у вас есть вышеуказанная сборка, общий 5-этапный конвейер будет выглядеть примерно так, как показано ниже, но, поскольку существует зависимость от данных, первая инструкция не сохранит результат до этапа 5, и, следовательно, вторая инструкция не может начать выборку Результаты. Как бы вы ожидали окончания цикла, вставив инструкции NOP?
Instruction Cycle 1 2 3 4 5 6 7
mov $10, %eax IF ID EX MEM WB
add $2, %eax IF ID EX MEM WB
mov $4, %ebx IF ID EX MEM WB
Редактировать Не уверен, что это правильно, но вот что я придумал:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
mov $10, %eax F D E M W
NOP F D E M W
NOP F D E M W
NOP F D E M W
add $2, %eax F D E M W
mov $4, %ebx F D E M W
mov $5, %ecx F D E M W
NOP F D E M W
NOP F D E M W
add $1, %ebx F D E M W
add $1, %ecx F D E M W
NOP F D E M W
NOP F D E M W
NOP F D E M W
add %ecx, %eax F D E M W
add %ebx, %eax F D E M W