Размер BTB для Haswell, Sandy Bridge, Ivy Bridge и Skylake?
Есть ли какой-нибудь способ определить или какой-нибудь ресурс, где я могу найти размер целевого буфера филиала для процессоров Haswell, Sandy Bridge, Ivy Bridge и Skylake Intel?
1 ответ
Проверьте ресурсы по оптимизации программного обеспечения Агнер Фог, http://www.agner.org/optimize/
BTB должен быть в "Микроархитектуре процессоров Intel, AMD и VIA: руководство по оптимизации для программистов на сборках и производителей компиляторов", http://www.agner.org/optimize/microarchitecture.pdf
3.7. Прогнозирование ветвей в Intel Sandy Bridge и Ivy Bridge
BTB организация. По неофициальным слухам, целевой буфер ветвей в Sandy Bridge больше, чем в Nehalem. Неизвестно, имеет ли он один уровень, как в Core 2 и более ранних процессорах, или два уровня, как в Nehalem. Он может обрабатывать максимум четыре инструкции вызова на 16 байтов кода. Условные переходы менее эффективны, если на 16 байтов кода приходится более 3 инструкций перехода.
3.8. Прогнозирование ветвей в Intel Haswell, Broadwell и Skylake
BTB организация. Организация целевого буфера филиала неизвестна. Это кажется достаточно большим.
Intel может описать некоторые данные в "Справочном руководстве по оптимизации архитектур Intel 64 и IA-32" http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html вокруг "3.4.1 Оптимизация прогнозирования ветвления", но все еще без размеров.
Это может выглядеть странно, но в 1998-2000 гг. Не было информации о BTB в cpuid: http://www.installaware.com/forums/oldattachments/02142006163/tstcpuid.c (автор Gerald J. Heim, Университет Тюбингена, Германия)..). И до сих пор не указан в http://www.felixcloutier.com/x86/CPUID.html или в некоторых общедоступных материалах от сотрудников Intel...
* This table describes the possible cache and TLB configurations * as documented by Intel. For now AMD doesn't use this but gives * exact cache layout data on CPUID 0x8000000x. * * MAX_CACHE_FEATURES_ITERATIONS limits the possible cache information * to 80 bytes (of which 16 bytes are used in generic Pentii2). * With 80 possible caches we are on the safe side for one or two years. * * Strange enough no BHT, BTB or return stack data is given this way...
Должны быть некоторые счетчики единиц мониторинга производительности (PMU) для BTB, и есть эксперименты, чтобы получить размер BTB от запуска специальных тестовых программ, проверьте http://xania.org/201602/haswell-and-ivy-btb от Matt Godbolt
Выводы
Исходя из этих результатов, кажется, что Ivy Bridge (и, следовательно, вероятно, Sandy Bridge) использует почти такую же стратегию для поиска BTB безусловных ветвей, хотя и с большим размером таблицы: 4096 записей разделены на 1024 набора из 4 способов.
Для Haswell кажется, что был принят новый подход к определению множеств, наряду с новым подходом к удалению записей.
и еще его посты о прогнозе отрасли и его событиях:
- http://xania.org/201602/bpu-part-one Статический прогноз ветвления на новых процессорах Intel
- http://xania.org/201602/bpu-part-two Прогноз отрасли - часть вторая
- http://xania.org/201602/bpu-part-three BTB в современных чипах Intel)
- http://xania.org/201602/bpu-part-four целевой буфер филиала, часть 2
Его код является общедоступным, на основе тестов Агнера: https://github.com/mattgodbolt/agner: https://github.com/mattgodbolt/agner/blob/master/tests/btb_size.py, https://github.com/mattgodbolt/agner/blob/master/tests/branch.py