x86 - lake - ivy bridge sandy bridge
TamaƱo BTB para Haswell, Sandy Bridge, Ivy Bridge y Skylake (1)
¿Hay alguna manera de determinar o cualquier recurso donde pueda encontrar el tamaño de búfer de destino de bifurcación para los procesadores Haswell, Sandy Bridge, Ivy Bridge y Skylake Intel?
Consulte los recursos de optimización de software por Agner Fog, http://www.agner.org/optimize/
BTB debería estar en "La microarquitectura de las CPU Intel, AMD y VIA: una guía de optimización para programadores ensambladores y fabricantes de compiladores", http://www.agner.org/optimize/microarchitecture.pdf
3.7 Predicción de sucursal en Intel Sandy Bridge y Ivy Bridge
Organización de BTB El buffer de destino de la bifurcación en Sandy Bridge es más grande que en Nehalem según rumores no oficiales. Se desconoce si tiene un nivel, como en Core 2 y procesadores anteriores, o dos niveles como en Nehalem. Puede manejar un máximo de cuatro instrucciones de llamada por cada 16 bytes de código. Los saltos condicionales son menos eficientes si hay más de 3 instrucciones de bifurcación por cada 16 bytes de código.
3.8 Predicción de rama en Intel Haswell, Broadwell y Skylake
Organización de BTB La organización del búfer de destino de sucursal es desconocida. Parece ser bastante grande.
Intel puede describir algunos datos en "Intel 64 y IA-32 Architectures Optimization Reference Manual" http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures- optimization-manual.html alrededor de "3.4.1 Branch Prediction Optimization", pero aún no tiene tamaños.
Puede parecer extraño, pero no hubo información sobre BTB en cpuid en 1998-2000: http://www.installaware.com/forums/oldattachments/02142006163/tstcpuid.c (por Gerald J. Heim, Universidad de Tübingen, Alemania .). Y aún no figura en http://www.felixcloutier.com/x86/CPUID.html o en algunos materiales públicos de los trabajadores de 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...
Debería haber algunos contadores de unidad de supervisión de rendimiento (PMU) para BTB, y existen experimentos para obtener el tamaño de BTB ejecutando programas de prueba especiales, consulte http://xania.org/201602/haswell-and-ivy-btb por Matt Godbolt
Conclusiones
A partir de estos resultados, parece que Ivy Bridge (y por lo tanto probablemente Sandy Bridge) usa prácticamente la misma estrategia para búsquedas BTB de ramas incondicionales, aunque con un tamaño de tabla más grande: 4096 entradas divididas en 1024 conjuntos de 4 formas.
Para Haswell, parece que se ha adoptado un nuevo enfoque para determinar los conjuntos, junto con un nuevo enfoque para desalojar las entradas.
y más sus publicaciones sobre la predicción de sucursales y sus eventos:
- http://xania.org/201602/bpu-part-one Predicción de rama estática en procesadores Intel más nuevos
- http://xania.org/201602/bpu-part-two Predicción de rama - segunda parte
- http://xania.org/201602/bpu-part-three El BTB en los chips Intel actuales)
- http://xania.org/201602/bpu-part-four Branch Target Buffer, parte 2
Su código es público, basado en las pruebas de Agner: 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