Assembler - язык неограниченных возможностей


Выполнение команд


Процессор Pentium содержит два конвейера исполнения целочисленных команд (U и V) и один конвейер для команд FPU. Он может выполнять две целочисленные команды одновременно и поддерживает механизм предсказания переходов, значительно сокращающий частоту сброса очереди предвыборки из-за передачи управления по другому адресу.

Процессор перед выполнением команды анализирует сразу две следующие команды, находящиеся в очереди и, если возможно, выполняет одну из них в U-конвейере, а другую в V. Если это невозможно, первая команда загружается в U-конвейер, а V-конвейер пустует.

V-конвейер имеет определенные ограничения на виды команд, которые могут в нем исполняться. Приложение 2 содержит для каждой команды информацию о том, может ли она выполняться одновременно с другими командами и в каком конвейере. Кроме того, две команды не будут запущены одновременно, если:

  • команды подвержены одной из следующих регистровых зависимостей:
    1. Первая команда пишет в регистр, а вторая читает из него.
    2. Обе команды пишут в один и тот же регистр (кроме записи в EFLAGS).
    3. Исключения из этих правил— пары PUSH/PUSH, PUSH/POP и PUSH/CALL, выполняющие запись в регистр ESP;

    4. одна из команд не находится в кэше команд (кроме случая, если первая команда — однобайтная);
    5. одна из команд длиннее семи байт (для Pentium);
    6. одна команда длиннее восьми байт, а другая — семи (для Pentium ММХ).

    Помните, что простыми перестановками команд можно выиграть до 200% скорости в критических ситуациях.




    Начало  Назад  Вперед