Предположим, каким-либо образом мне удалось найти процессор, в котором "чистый" двухуровневый адаптивный предсказатель с локальной историей (Two-level adaptive predictor with local history tables). Тогда для того, чтобы определить, каков размер той самой таблицы (сколько бит/как много последних переходов сохраняется), можно написать простенькую процедуру, например (положив, например, iter=100k, а iter2 плавно изменяя от 3 до, скажем, 32): Код (Text): void test(int iter, int iter2) { __asm { mov eax, iter mov ebx, iter2 mov ecx, iter2 mov edx, 114 jmp $loop $dop: xor edx, ebx sub edx, eax mov ecx, ebx $loop: dec ecx jz $dop and edx, ebx add edx, eax dec eax jnz $loop } } Если засечь время выполнения в тактах в зависимости от параметра 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) смысл этот пик приобретает теперь?