# Bulldozer (Microarquitetura)

A família AMD Bulldozer 15h é uma microarquitetura de microprocessadores para as linhas de processadores FX e Opteron, desenvolvida pela AMD para os mercados de desktops e servidores. Bulldozer é o codinome desta família de microarquiteturas. Foi lançado em 12 de outubro de 2011, como sucessor da microarquitetura K10.
O Bulldozer foi projetado do zero, não um desenvolvimento de processadores anteriores. O núcleo é voltado especificamente para produtos de computação com TDPs de 10 a 125 watts. A AMD afirma melhorias dramáticas na eficiência de desempenho por watt em aplicativos de computação de alto desempenho (HPC) com núcleos Bulldozer.
Os núcleos Bulldozer suportam a maioria dos conjuntos de instruções implementados pelos processadores Intel (Sandy Bridge) disponíveis em sua introdução (incluindo SSE4.1, SSE4.2, AES, CLMUL, e AVX) bem como novos conjuntos de instruções propostos pela AMD; ABM, XOP, FMA4 e F16C. Somente Bulldozer GEN4 (Excavator) suporta conjuntos de instruções AVX2.

## Visão geral

De acordo com a AMD, as CPUs baseadas em Bulldozer são baseadas na tecnologia de processo de silício em isolador (SOI) de 32 nm da GlobalFoundries e reutilizam a abordagem do DEC para desempenho de computador multitarefa com os argumentos de que, de acordo com notas de imprensa, "equilibra computadores dedicados e compartilhados recursos para fornecer um design altamente compacto e com alta contagem de unidades que é facilmente replicado em um chip para dimensionamento de desempenho." Em outras palavras, ao eliminar alguns dos elementos "redundantes" que naturalmente aparecem em designs multicore, a AMD espera tirar melhor proveito de suas capacidades de hardware, usando menos energia.
Implementações baseadas em Bulldozer construídas em SOI de 32 nm com HKMG chegaram em outubro de 2011 para servidores e desktops. O segmento de servidores incluía o processador Opteron de chip duplo (16 núcleos) de codinome Interlagos (para Socket G34) e chip único (4, 6 ou 8 núcleos) Valencia (para Socket C32), enquanto o Zambezi (4, 6 e 8 núcleos) desktops direcionados no AM3+.
Bulldozer é a primeira grande reformulação da arquitetura de processador da AMD desde 2003, quando a empresa lançou seus processadores K8, e também apresenta duas FPUs compatíveis com FMA de 128 bits que podem ser combinadas em uma FPU de 256 bits. Este design é acompanhado por dois clusters inteiros, cada um com 4 pipelines (o estágio de busca/decodificação é compartilhado). Bulldozer também introduziu cache L2 compartilhado na nova arquitetura. A AMD chama esse design de “Módulo”. Um projeto de processador de 16 núcleos apresentaria oito desses “módulos”,$^[$ mas o sistema operacional reconhecerá cada “módulo” como dois núcleos lógicos.
A arquitetura modular consiste em cache L2 compartilhado multithread e FlexFPU, que utiliza multithreading simultâneo. Cada núcleo inteiro físico, dois por módulo, é de thread único, em contraste com o Hyperthreading da Intel, onde dois threads virtuais simultâneos compartilham os recursos de um único núcleo físico.
Em uma revisão retrospectiva, Jeremy Laird da revista APC comentou sobre os problemas do Bulldozer, observou que ele era mais lento do que o design anterior do Phenom II K10 e que o ecossistema de software para PC ainda não havia "adotado" o modelo multithread. Pela sua observação, os problemas causaram uma grande perda para a AMD, que a empresa perdeu mais de 1 bilhão de dólares em 2012, e que alguns observadores da indústria previam a falência em meados de 2015. Mais tarde, a empresa conseguiu voltar ao lucro. As razões mencionadas para recuperar a lucratividade foram o desinvestimento anterior da fabricação interna na GlobalFoundries e, em seguida, a terceirização da fabricação para a TSMC e a criação de um novo design de CPU Ryzen.

## Arquitetura
### Bulldozer core

Bulldozer fez uso de "Clustered Multithreading" (CMT), uma técnica onde algumas partes do processador são compartilhadas entre dois threads e algumas partes são exclusivas para cada thread. Exemplos anteriores de tal abordagem para multithreading não convencional podem ser rastreados até a CPU UltraSPARC T1 da Sun Microsystems de 2005. Em termos de complexidade e funcionalidade de hardware, um módulo Bulldozer CMT é igual a um processador dual-core em suas capacidades de cálculo inteiro, e a um processador single-core ou a um dual-core deficiente em termos de poder computacional de ponto flutuante, dependendo sobre se o código está saturado em instruções de ponto flutuante em ambos os threads em execução no mesmo módulo CMT e se a FPU está executando operações de ponto flutuante de 128 ou 256 bits. A razão para isso é que para cada dois núcleos inteiros, ou seja, dentro do mesmo módulo, existe uma única unidade de ponto flutuante composta por um par de unidades de execução FMAC de 128 bits.
CMT é, de certa forma, uma filosofia de design mais simples, mas semelhante ao SMT; ambos os projetos tentam utilizar unidades de execução de forma eficiente; em qualquer método, quando dois threads competem por alguns pipelines de execução, há uma perda de desempenho em um ou mais threads. Devido aos núcleos inteiros dedicados, os módulos da família Bulldozer funcionaram aproximadamente como um processador dual-core e dual-threaded durante seções de código que eram totalmente inteiras ou uma mistura de cálculos inteiros e de ponto flutuante; ainda assim, devido ao uso SMT de pipelines de ponto flutuante compartilhados, o módulo teria desempenho semelhante a um processador SMT de núcleo único e thread duplo (SMT2) para um par de threads saturados com instruções de ponto flutuante. (Ambas as duas últimas comparações pressupõem que o processador possui um núcleo de execução igualmente amplo e capaz, em termos de número inteiro e de ponto flutuante, respectivamente.)
Tanto o CMT quanto o SMT atingem eficácia máxima ao executar código inteiro e de ponto flutuante em um par de threads. O CMT permanece com eficácia máxima enquanto trabalha em um par de threads que consistem em código inteiro, enquanto no SMT, um ou ambos os threads terão desempenho inferior devido à competição por unidades de execução inteiras. A desvantagem do CMT é um número maior de unidades de execução inteiras ociosas em um único caso de thread. No caso de thread único, o CMT está limitado a usar no máximo metade das unidades de execução inteiras em seu módulo, enquanto o SMT não impõe tal limite. Um grande núcleo SMT com circuitos inteiros tão amplos e rápidos quanto dois núcleos CMT poderia, em teoria, ter momentaneamente até o dobro do desempenho de números inteiros em um único caso de thread. (Mais realisticamente para o código geral como um todo, a Regra de Pollack estima um fator de aceleração de ${\sqrt {2}}$, ou aumento de aproximadamente 40% no desempenho.)
Os processadores CMT e um processador SMT típico são semelhantes no uso compartilhado eficiente do cache L2 entre um par de threads.
* Um módulo consiste em um acoplamento de dois núcleos de processamento x86 "convencionais" fora de ordem. O núcleo de processamento compartilha os estágios iniciais do pipeline (por exemplo, L1i, busca, decodificação), as FPUs e o cache L2 com o restante do módulo.
** Cada módulo possui os seguintes recursos de hardware independentes:
** 16 KB 4 vias de L1d (via prevista) por núcleo e 2 vias 64 KB de L1i por módulo, uma via para cada um dos dois núcleos
** 2 MB de cache L2 por módulo (compartilhado entre os dois núcleos inteiros)
** Write Coalescing Cache é um cache especial que faz parte do cache L2 na microarquitetura Bulldozer. Os armazenamentos de ambos os caches L1D no módulo passam pelo WCC, onde são armazenados em buffer e agrupados. A tarefa do WCC é reduzir o número de gravações no cache L2.
** Dois núcleos inteiros dedicados
*** – cada um inclui duas ALU e duas AGU que são capazes de um total de quatro operações aritméticas e de memória independentes por clock e por núcleo
*** – a duplicação de agendadores inteiros e pipelines de execução oferece hardware dedicado para cada um dos dois threads, o que duplica o desempenho para cargas inteiras multithread.
*** – o segundo núcleo inteiro no módulo aumenta a matriz do módulo Bulldozer em cerca de 12%, o que no nível do chip adiciona cerca de 5% do espaço total da matriz
** Dois pipelines de ponto flutuante FMAC (capacidade de adição e multiplicação fundida) simétricos de 128 bits por módulo que podem ser unificados em uma unidade grande de 256 bits se um dos núcleos inteiros despachar instruções AVX e dois x87/MMX/SSE simétricos capazes FPPs para compatibilidade retroativa com software SSE2 não otimizado. Cada unidade FMAC também é capaz de operações de divisão e raiz quadrada com latência variável.
* Todos os módulos presentes compartilham o cache L3, bem como um subsistema avançado de memória de canal duplo (IMC – Integrated Memory Controller).
* Um módulo possui 213 milhões de transistores em uma área de 30,9 mm² (incluindo o cache L2 compartilhado de 2 MB) em um dado Orochi.
* A profundidade do pipeline do Bulldozer (assim como do Piledriver e Steamroller) é de 20 ciclos, em comparação com 12 ciclos do antecessor principal K10.
O pipeline mais longo permitiu que a família de processadores Bulldozer atingisse uma frequência de clock muito mais alta em comparação com seus antecessores K10. Embora isso tenha aumentado as frequências e a taxa de transferência, o pipeline mais longo também aumentou as latências e aumentou as penalidades por erros de previsão nos ramais.
* A largura do núcleo inteiro Bulldozer, quatro (2 ALU, 2 AGU), é um pouco menor que a largura do núcleo K10, seis (3 ALU, 3 AGU). Bobcat e Jaguar também usaram quatro núcleos inteiros largos, mas com unidades de execução mais leves: 1 ALU, 1 ALU simples, 1 AGU de carga, 1 AGU de armazenamento.
As larguras de emissão (e pico de execução de instruções por ciclo) de um núcleo Jaguar, K10 e Bulldozer são 2, 3 e 4, respectivamente. Isso fez do Bulldozer um design mais superescalar em comparação com o Jaguar/Bobcat. No entanto, devido ao núcleo um pouco mais amplo do K10 (além da falta de refinamentos e otimizações em um design de primeira geração), a arquitetura Bulldozer normalmente funcionava com IPC um pouco mais baixo em comparação com seus antecessores K10. Foi somente com os refinamentos feitos no Piledriver e no Steamroller que o IPC da família Bulldozer começou a exceder claramente o dos processadores K10, como o Phenom II.

### Branch predictor

* Buffer alvo de filial de dois níveis (BTB)
* Preditor híbrido para condicionais
* Preditor indireto

### Extensões do conjunto de instruções

* Suporte para o conjunto de instruções Advanced Vector Extensions (AVX) da Intel, que suporta operações de ponto flutuante de 256 bits, e SSE4.1, SSE4.2, AES, CLMUL, bem como futuros conjuntos de instruções de 128 bits propostos pela AMD (XOP, FMA4, e F16C),
que possuem a mesma funcionalidade do conjunto de instruções SSE5 anteriormente proposto pela AMD, mas com compatibilidade com o esquema de codificação AVX.
* Bulldozer GEN4 (Excavator) suporta conjuntos de instruções AVX2.

### Tecnologia de processo e frequência de clock

* Processo SOI de 32 nm de 11 camadas de metal com High-K Metal Gate (HKMG) de primeira geração da GlobalFoundries implementado
* Boost do desempenho do Turbo Core 2 para aumentar a frequência de clock em até 500 MHz com todos os threads ativos (para a maioria das cargas de trabalho) e até 1 GHz com metade do thread ativo, dentro do limite de TDP.
* O chip opera de 0,775 a 1,425 V, atingindo frequências de clock de 3,6 GHz ou mais
* TDP mínimo-máximo: 25 – 140 watts

### Interface de cache e memória

* Até 8 MB de L3 compartilhados entre todos os núcleos no mesmo chip de silício (8 MB para 4 núcleos no segmento Desktop e 16 MB para 8 núcleos no segmento Servidor), divididos em quatro subcaches de 2 MB cada, capazes de operar a 2,2 GHz a 1,1125 V
* Suporte de memória DDR3 nativa até DDR3-1866
* Controlador de memória integrado DDR3 Dual Channel para Desktop e Servidor/Workstation Opteron 42xx "Valencia"; Controlador de Memória Integrado DDR3 Quad Channel para Servidor/Estação de Trabalho Opteron 62xx "Interlagos"
* A AMD afirma suporte para dois DIMMs DDR3-1600 por canal. Dois DIMMs de DDR3-1866 em um único canal terão clock reduzido para 1600.

### Interface de E/S e socket

* * Tecnologia HyperTransport rev. 3.1 (3,20 GHz, 6,4 GT/s, 25,6 GB/s e link amplo de 16 bits) [implementado pela primeira vez na revisão HY-D1 "Magny-Cours" na plataforma soquete G34 Opteron em março de 2010 e "Lisboa" no soquete Plataforma C32 Opteron em junho de 2010]
* Socket AM3+ (AM3r2)
** 942 pinos, suporte apenas para DDR3
** Manterá compatibilidade retroativa com placas-mãe Socket AM3 (conforme escolha do fabricante da placa-mãe e se atualizações de BIOS forem fornecidas), porém isso não é oficialmente suportado pela AMD; As placas-mãe AM3+ serão compatíveis com versões anteriores dos processadores AM3.
* Para o segmento de servidores, serão utilizados o soquete G34 (LGA1974) e o soquete C32 (LGA1207) existentes.

## Processors

As primeiras remessas de receitas de processadores Opteron baseados em Bulldozer foram anunciadas em 7 de setembro de 2011. O FX-4100, FX-6100, FX-8120 e FX-8150 foram lançados em outubro de 2011; com os processadores AMD da série FX restantes lançados no final do primeiro trimestre de 2012.

### Desktop

| Modelo | [Módulos/FPUs] Cores/threads | Freq. (GHz) | Max. turbo (GHz) | Max. turbo (GHz) | Cache L2 | L3 (MB) | TDP (W) | Memória DDR3 | Turbo Core 2.0 | Socket |
| Modelo | [Módulos/FPUs] Cores/threads | Freq. (GHz) | Full load | Half load | Cache L2 | L3 (MB) | TDP (W) | Memória DDR3 | Turbo Core 2.0 | Socket |
| FX-8100 | [4]8 | 2.8 | 3.1 | 3.7 | 4× 2MB | 8 | 95 | 1866 | Sim | AM3+ |
| FX-8120 | [4]8 | 3.1 | 3.4 | 4.0 | 4× 2MB | 8 | 125 | 1866 | Sim | AM3+ |
| FX-8140 | [4]8 | 3.2 | 3.6 | 4.1 | 4× 2MB | 8 | 95 | 1866 | Sim | AM3+ |
| FX-8150 | [4]8 | 3.6 | 3.9 | 4.2 | 4× 2MB | 8 | 125 | 1866 | Sim | AM3+ |
| FX-8170 | [4]8 | 3.9 | 4.2 | 4.5 | 4× 2MB | 8 | 125 | 1866 | Sim | AM3+ |
| FX-6100 | [3]6 | 3.3 | 3.6 | 3.9 | 3× 2MB | 8 | 95 | 1866 | Sim | AM3+ |
| FX-6120 | [3]6 | 3.6 | 3.9 | 4.2 | 3× 2MB | 8 | 95 | 1866 | Sim | AM3+ |
| FX-6130 | [3]6 | 3.6 | 3.8 | 3.9 | 3× 2MB | 8 | 95 | 1866 | Sim | AM3+ |
| FX-6200 | [3]6 | 3.8 | 4.0 | 4.1 | 3× 2MB | 8 | 125 | 1866 | Sim | AM3+ |
| FX-4100 | [2]4 | 3.6 | 3.7 | 3.8 | 2x 2MB | 8 | 95 | 1866 | Sim | AM3+ |
| FX-4120 | [2]4 | 3.9 | 4.0 | 4.1 | 2x 2MB | 8 | 95 | 1866 | Sim | AM3+ |
| FX-4130 | [2]4 | 3.8 | 3.9 | 4.0 | 2x 2MB | 4 | 125 | 1866 | Sim | AM3+ |
| FX-4150 | [2]4 | 3.8 | 3.9 | 4.0 | 2x 2MB | 8 | 95/125 | 1866 | Sim | AM3+ |
| FX-4170 | [2]4 | 4.2 | 4.3 | 4.3 | 2x 2MB | 8 | 125 | 1866 | Sim | AM3+ |
Principais fontes: CPU-World e Xbit-Labs

### Servidor

Existem duas séries de processadores baseados em Bulldozer para servidores: a série Opteron 4200 (Socket C32, codinome Valencia, com até quatro módulos) e a série Opteron 6200 (Socket G34, codinome Interlagos, com até 8 módulos).

## Processo de publicidade falsa

Em novembro de 2015, a AMD foi processada de acordo com a Lei de Remédios Legais dos Consumidores da Califórnia e a Lei de Concorrência Desleal por supostamente deturpar as especificações dos chips Bulldozer. A ação coletiva, movida em 26 de outubro no Tribunal Distrital dos EUA para o Distrito Norte da Califórnia, afirma que cada módulo Bulldozer é na verdade um único núcleo de CPU com algumas características de dual-core, em vez de um verdadeiro design dual-core. Em agosto de 2019, a AMD concordou em resolver o processo por US$ 12,1 milhões.

## Desempenho
### Desempenho no Linux

Em 24 de outubro de 2011, os testes de primeira geração feitos pela Phoronix confirmaram que o desempenho da CPU Bulldozer estava um pouco abaixo do esperado. Em vários testes, a CPU teve desempenho semelhante ao Phenom 1060T da geração anterior.
Posteriormente, o desempenho aumentou substancialmente, à medida que várias otimizações do compilador e correções de driver de CPU foram lançadas.

### Desempenho no Windows

As primeiras CPUs Bulldozer tiveram uma resposta mista. Foi descoberto que o FX-8150 teve um desempenho ruim em benchmarks que não eram altamente threaded, ficando atrás dos processadores da série Intel Core i* de segunda geração e sendo igualado ou até mesmo superado pelo próprio Phenom II X6 da AMD em velocidades de clock mais baixas. Em benchmarks altamente segmentados, o FX-8150 teve desempenho equivalente ao Phenom II X6 e ao Intel Core i7 2600K, dependendo do benchmark. Dado o desempenho geral mais consistente do Intel Core i5 2500K a um preço mais baixo, esses resultados deixaram muitos revisores desapontados. Descobriu-se que o processador consome muita energia sob carga, especialmente quando com overclock, em comparação com o Sandy Bridge da Intel.
Em 13 de outubro de 2011, a AMD declarou em seu blog que "há alguns em nossa comunidade que acham que o desempenho do produto não atendeu às suas expectativas", mas mostrou benchmarks em aplicações reais onde superou o desempenho do Sandy Bridge i7 2600k e do AMD X6 1100T.
Em janeiro de 2012, a Microsoft lançou dois hotfixes para Windows 7 e Server 2008 R2 que melhoram marginalmente o desempenho das CPUs Bulldozer, abordando as preocupações de agendamento de threads levantadas após o lançamento do Bulldozer.
Em 6 de março de 2012, a AMD publicou um artigo da base de conhecimento afirmando que havia um problema de compatibilidade com processadores FX e certos jogos na plataforma de distribuição de jogos digitais amplamente utilizada, Steam. A AMD afirmou ter fornecido uma atualização de BIOS para vários fabricantes de placas-mãe (a saber: Asus, Gigabyte Technology, MSI e ASRock) que resolveria o problema.
Em setembro de 2014, o CEO da AMD, Rory Read, admitiu que o design do Bulldozer não foi uma "parte revolucionária" e que a AMD teve que conviver com o design por quatro anos.

### Overclocking

Em 31 de agosto de 2011, a AMD e um grupo de overclockers conhecidos, incluindo Brian McLachlan, Sami Mäkinen, Aaron Schradin e Simon Solotko, conseguiram estabelecer um novo recorde mundial de frequência de CPU usando o processador FX-8150 Bulldozer inédito e com overclock. Antes daquele dia, o recorde era de 8,309 GHz, mas o Bulldozer combinado com o resfriamento de hélio líquido atingiu um novo recorde de 8,429 GHz. Desde então, o recorde foi superado em 8,58 GHz por Andre Yang usando nitrogênio líquido. Em 22 de agosto de 2014 e usando um FX-8370 (Piledriver), The Stilt da Team Finland alcançou uma frequência máxima de CPU de 8,722 GHz.
Os registros de frequência de clock da CPU estabelecidos por CPUs Bulldozer com overclock só foram quebrados quase uma década depois por overclocks de CPUs Core Raptor Lake de 13ª geração da Intel em outubro de 2022.

## Revisões

Piledriver é o codinome da AMD para sua microarquitetura aprimorada de segunda geração baseada no Bulldozer. Os núcleos AMD Piledriver são encontrados nas séries de APUs e CPUs baseadas em Socket FM2 Trinity e Richland e na série de CPUs FX baseadas em Socket AM3 + Vishera. O Piledriver foi a última geração da família Bulldozer disponível para soquete AM3+ e com cache L3. Os processadores Piledriver disponíveis para soquetes FM2 (e sua variante móvel) não vêm com cache L3, pois o cache L2 é o cache de último nível para todos os processadores FM2/FM2+.
Steamroller é o codinome da AMD para sua microarquitetura de terceira geração baseada em uma versão melhorada do Piledriver. Os núcleos Steamroller são encontrados na série de APUs e CPUs baseadas em Socket FM2 + Kaveri.
Excavator é o codinome do núcleo Bulldozer de quarta geração. Excavator foi implementada como APUs 'Carrizo' série A, APUs "Bristol Ridge" série A e CPUs Athlon x4.