Предсказание переходов

Тема в разделе "WASM.BEGINNERS", создана пользователем ilvip, 12 дек 2006.

  1. ilvip

    ilvip New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2006
    Сообщения:
    6
    Предположим, каким-либо образом мне удалось найти процессор, в котором "чистый" двухуровневый адаптивный предсказатель с локальной историей (Two-level adaptive predictor with local history tables). Тогда для того, чтобы определить, каков размер той самой таблицы (сколько бит/как много последних переходов сохраняется), можно написать простенькую процедуру, например (положив, например, iter=100k, а iter2 плавно изменяя от 3 до, скажем, 32):
    Код (Text):
    1. void test(int iter, int iter2)
    2. {
    3.         __asm
    4.         {
    5.                 mov eax, iter
    6.                 mov ebx, iter2
    7.                 mov ecx, iter2
    8.                 mov edx, 114
    9.                 jmp $loop
    10.         $dop:
    11.                 xor edx, ebx
    12.                 sub edx, eax
    13.                 mov ecx, ebx
    14.         $loop:
    15.                 dec ecx
    16.                 jz $dop
    17.                 and edx, ebx
    18.                 add edx, eax
    19.                 dec eax
    20.                 jnz $loop
    21.         }
    22. }
    Если засечь время выполнения в тактах в зависимости от параметра iter2, можно увидеть резкий прыжок на iter2 = n + 2, где n как раз и есть искомая длина шаблона. (связано это с тем, что шаблон 000...001, состоящий из n+1 непереходов ("0") и 1 перехода ("1") при помощи таблицы локальной истории на n записей распознан не может быть, т.к. за паттерном 000...0 может следовать как "0", так и "1" и соответствующий счетчик с насыщением просто не справляется => потери времени на конвейере при неправильном предсказании).

    Если теперь вернуться в реальность, то процессора с "чисто" таким предсказателем у меня нет, есть же современные (относительно ... ) процессоры как Pentium 3, Pentium M, Celeron D и Core Duo (и Alpha, только код под неё пока не переписывал - впрочем это несложно). А у них предсказатель заведомо сложнее. Поэтому и возник вопрос: при запуске той программы на перечисленных процессорах пик отчетливо наблюдается. Но какой реальный (физический в терминах устройства BTB) смысл этот пик приобретает теперь?