"Оптимизация для PENTIUM процессора" - читать интересную книгу автора12. ПЕРЕХОДЫ И ВЕТВИ ==================== Pentium пытается предсказать - произойдет ли условный переход, или нет. Для этого у него есть "буффер предсказания переходов" (BTB) в котором храниться история 256 последних переходов. Pentium без MMX, делает предсказания на основе двух последних событий. Предполагается, что условный переход произойдет, если он произошел в прошлый или в позопрошлый раз. Соответственно, если условный преход не произошел в последние два раза, то предполагается, что он не произойдет и сейчас. Если условный переход,не встречался ранее (или отсутствует в BTB), то считается что он не произойдет. Pentium MMX (или Pentium Pro) делают свой анализ на основе последних четырех событий, т.е. может предсказать простой повторяющийся участок. Условный переход, который не встречался ранее (или отсутствует в BTB), будет считаться происходящим, если он направлен назад (т.н. цикл) и не происходящем, если он направлен вперед. Если условный переход предсказан правильно,(т.е.если догадка была правильная), то он будет исполнен за 1 такт. Непредсказанный переход исполниться за 4 такта, если инструкция в U-трубе и за 5 тактов, если в V-трубе. за переходом будет инструкция другого перехода или вызова подпрограммы. Pentium ведет себя очень странно в данной ситуации. Механизм предсказания переходов полностью дезориентируется: второй переход может не предсказаться, даже если он должен предсказаться и наоборот. И это проблема остается, в следующий раз переход снова не будет предсказан. Более того, любой безусловный переход или вызов подпрограммы потребуют дополнительных тактов, если будут стоять первой инструкцией после перехода. Для того что бы избегать этого вы должны избегать использовать инструкции переходов или вызовов подпрограмм сразу в начале новой ветви. Пример: DEC EAX JNZ L1 CMP EBX,ECX NOP JB L2 ... L1: NOP NOP CALL P ... L2: NOP RET Pentium MMX так же может потребоваться дополнительные такты, но только в том |
|
|