- Etapas executadas ao descarregar cálculos para a GPU em um sistema não HSA
- Etapas executadas ao descarregar cálculos para a GPU em um sistema HSA, usando a funcionalidade HSA
Heterogeneous System Architecture (HSA) é um conjunto de especificações de vários fornecedores que permite a integração de unidades centrais de processamento e processadores gráficos no mesmo barramento, com memória e tarefas compartilhadas. O HSA está sendo desenvolvido pela HSA Foundation, que inclui (entre muitos outros) AMD e ARM. O objetivo declarado da plataforma é reduzir a latência de comunicação entre CPUs, GPUs e outros dispositivos de computação e tornar esses vários dispositivos mais compatíveis da perspectiva do programador,:3 aliviando o programador da tarefa de planejar a movimentação de dados entre memórias disjuntas de dispositivos (como deve ser feito atualmente com OpenCL ou CUDA).
CUDA e OpenCL, bem como a maioria das outras linguagens de programação bastante avançadas, podem usar HSA para aumentar seu desempenho de execução. A computação heterogênea é amplamente utilizada em dispositivos de sistema em chip, como tablets, smartphones, outros dispositivos móveis e consoles de videogame. O HSA permite que os programas usem o processador gráfico para cálculos de ponto flutuante sem memória ou agendamento separado.
A lógica por trás do HSA é aliviar a carga dos programadores ao transferir cálculos para a GPU. Originalmente impulsionada exclusivamente pela AMD e chamada de FSA, a ideia foi estendida para abranger unidades de processamento além de GPUs, como DSPs de outros fabricantes.
As GPUs modernas são muito adequadas para executar instruções únicas, vários dados (SIMD) e instruções únicas, vários threads (SIMT), enquanto as CPUs modernas ainda estão sendo otimizadas para ramificação. etc.
Originalmente introduzido por sistemas embarcados como o Cell Broadband Engine, o compartilhamento de memória do sistema diretamente entre vários participantes do sistema torna a computação heterogênea mais comum. A computação heterogênea em si se refere a sistemas que contêm múltiplas unidades de processamento – unidades centrais de processamento (CPUs), unidades de processamento gráfico (GPUs), processadores de sinais digitais (DSPs) ou qualquer tipo de circuito integrado específico para aplicações (ASICs). A arquitetura do sistema permite que qualquer acelerador, por exemplo, um processador gráfico, opere no mesmo nível de processamento que a CPU do sistema.
Entre seus principais recursos, o HSA define um espaço de endereço virtual unificado para dispositivos de computação: enquanto as GPUs tradicionalmente têm sua própria memória, separada da memória principal (CPU), o HSA exige que esses dispositivos compartilhem tabelas de páginas para que os dispositivos possam trocar dados compartilhando ponteiros. Isso deve ser suportado por unidades de gerenciamento de memória personalizadas.:6–7 Para tornar a interoperabilidade possível e também facilitar vários aspectos da programação, o HSA foi criado para ser independente de ISA tanto para CPUs quanto para aceleradores, e para oferecer suporte a linguagens de programação de alto nível.
Até agora, as especificações do HSA abrangem:
HSAIL (Heterogeneous System Architecture Intermediate Language), um conjunto de instruções virtuais para programas paralelos
Os dispositivos móveis são uma das áreas de aplicação do HSA, na qual ele produz maior eficiência energética.
As ilustrações abaixo comparam a coordenação CPU-GPU sob HSA em comparação com arquiteturas tradicionais.

Alguns dos recursos específicos do HSA implementados no hardware precisam ser suportados pelo kernel do sistema operacional e por drivers de dispositivo específicos. Por exemplo, o suporte para placas de vídeo AMD Radeon e AMD FirePro, e APUs baseadas no Graphics Core Next (GCN), foi incorporado à versão 3.19 do kernel principal do Linux, lançada em 8 de fevereiro de 2015. Os programas não interagem diretamente com amdkfd, mas enfileiram seus trabalhos utilizando o tempo de execução do HSA. Esta primeira implementação, conhecida como amdkfd, foca em APUs "Kaveri" ou "Berlin" e funciona junto com o driver gráfico do kernel Radeon existente.
Adicionalmente, amdkfd oferece suporte ao heterogeneous queuing (HQ), que visa simplificar a distribuição de trabalhos computacionais entre várias CPUs e GPUs da perspectiva do programador. O suporte para gerenciamento de memória heterogênea (HMM), adequado apenas para hardware gráfico com a versão 2 do IOMMU da AMD, foi aceito na versão principal do kernel Linux 4.14.
O suporte integrado para plataformas HSA foi anunciado para o lançamento "Sumatra" do OpenJDK, previsto para 2015.
O AMD APP SDK é um kit de desenvolvimento de software proprietário da AMD voltado para computação paralela, disponível para Microsoft Windows e Linux. Bolt é uma biblioteca de modelos C++ otimizada para computação heterogênea.
O GPUOpen abrange algumas outras ferramentas de software relacionadas ao HSA. A versão 2.0 do CodeXL inclui um profiler HSA.
Em fevereiro de 2015, apenas as APUs da série A "Kaveri" da AMD (cf. processadores para desktop "Kaveri" e processadores dispositivos móveis "Kaveri") e o PlayStation 4 da Sony permitiam que a GPU integrada acessasse a memória por meio da versão 2 do IOMMU da AMD. APUs anteriores (Trinity e Richland) incluíam a funcionalidade do IOMMU da versão 2, mas apenas para uso por uma GPU externa conectada via PCI Express.[carece de fontes]
As APUs Carrizo e Bristol Ridge posteriores a 2015 também incluem a funcionalidade IOMMU versão 2 para a GPU integrada.[carece de fontes]
A tabela a seguir mostra recursos das APUs da AMD
| Plataforma | Alta, padrão e baixa potência | Baixa e ultra baixa potência | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Nome de código | Servidor | Basic | Toronto | |||||||||||||||||
| Micro | Kyoto | |||||||||||||||||||
| Desktop | Performance | Renoir | Cezanne | |||||||||||||||||
| Mainstream | Llano | Trinity | Richland | Kaveri | Kaveri Refresh (Godavari) | Carrizo | Bristol Ridge | Raven Ridge | Picasso | |||||||||||
| Entrada | ||||||||||||||||||||
| Basic | Kabini | |||||||||||||||||||
| Mobile | Performance | Renoir | Cezanne | Rembrandt | ||||||||||||||||
| Mainstream | Llano | Trinity | Richland | Kaveri | Carrizo | Bristol Ridge | Raven Ridge | Picasso | ||||||||||||
| Entrada | Dalí | |||||||||||||||||||
| Basic | Desna, Ontario, Zacate | Kabini, Temash | Beema, Mullins | Carrizo-L | Stoney Ridge | |||||||||||||||
| Integrado | Trinity | Bald Eagle | Merlin Falcon, Brown Falcon |
Great Horned Owl | Grey Hawk | Ontario, Zacate | Kabini | Steppe Eagle, Crowned Eagle, LX-Family |
Prairie Falcon | Banded Kestrel | ||||||||||
| Lançado | Agosto de 2011 | Outubro de 2012 | Junho de 2013 | Janeiro de 2014 | 2015 | Junho de 2015 | Junho de 2016 | Outubro de 2017 | Janeiro de 2019 | Março de 2020 | Janeiro de 2021 | Janeiro de 2022 | Janeiro de 2011 | Maio 2013 | Apr 2014 | Maio de 2015 | Fevereiro de 2016 | Abril de 2019 | ||
| Microarquitetura de CPU | K10 | Piledriver | Steamroller | Excavator | "Excavator+" | Zen | Zen+ | Zen 2 | Zen 3 | Zen 3+ | Bobcat | Jaguar | Puma | Puma+ | "Excavator+" | Zen | ||||
| ISA | x86-64 | x86-64 | ||||||||||||||||||
| Socket | Desktop | High-end | — | — | ||||||||||||||||
| Mainstream | — | AM4 | — | |||||||||||||||||
| Entrada | FM1 | FM2 | FM2+ | — | ||||||||||||||||
| Basic | — | — | AM1 | — | ||||||||||||||||
| Outros | FS1 | FS1+, FP2 | FP3 | FP4 | FP5 | FP6 | FP7 | FT1 | FT3 | FT3b | FP4 | FP5 | ||||||||
| Versão PCI Express | 2.0 | 3.0 | 4.0 | 2.0 | 3.0 | |||||||||||||||
| Fab. (nm) | GF 32SHP (HKMG SOI) |
GF 28SHP (HKMG bulk) |
GF 14LPP (FinFET bulk) |
GF 12LP (FinFET bulk) |
TSMC N7 (FinFET bulk) |
TSMC N6 (FinFET bulk) |
TSMC N40 (bulk) |
TSMC N28 (HKMG bulk) |
GF 28SHP (HKMG bulk) |
GF 14LPP (FinFET bulk) | ||||||||||
| Area do Die (mm2) | 228 | 246 | 245 | 245 | 250 | 210 | 156 | 180 | 210 | 75 (+ 28 FCH) | 107 | ? | 125 | 149 | ||||||
| TDP min. (W) | 35 | 17 | 12 | 10 | 15 | 4.5 | 4 | 3.95 | 10 | 6 | ||||||||||
| TDP max. de APU (W) | 100 | 95 | 65 | 45 | 18 | 25 | ||||||||||||||
| Clock base max. de stock de APU (GHz) | 3 | 3.8 | 4.1 | 4.1 | 3.7 | 3.8 | 3.6 | 3.7 | 3.8 | 4.0 | 3.3 | 1.75 | 2.2 | 2 | 2.2 | 3.2 | 2.6 | |||
| Máximo de APUs por nó | 1 | 1 | ||||||||||||||||||
| Max CPU cores por APU | 4 | 8 | 2 | 4 | 2 | |||||||||||||||
| Max threads por core de CPU | 1 | 2 | 1 | 2 | ||||||||||||||||
| i386, i486, i586, CMOV, NOPL, i686, PAE, NX bit, CMPXCHG16B, AMD-V, RVI, ABM, e LAHF/SAHF de 64-bit | ||||||||||||||||||||
| IOMMU | — | |||||||||||||||||||
| BMI1, AES-NI, CLMUL, e F16C | — | |||||||||||||||||||
| MOVBE | — | |||||||||||||||||||
| AVIC, BMI2 e RDRAND | — | |||||||||||||||||||
| ADX, SHA, RDSEED, SMAP, SMEP, XSAVEC, XSAVES, XRSTORS, CLFLUSHOPT, e CLZERO | — | — | ||||||||||||||||||
| WBNOINVD, CLWB, RDPID, RDPRU, e MCOMMIT | — | — | ||||||||||||||||||
| FPUs por core | 1 | 0.5 | 1 | 1 | 0.5 | 1 | ||||||||||||||
| Tubos por FPU | 2 | 2 | ||||||||||||||||||
| Largura do tubo FPU | 128-bit | 256-bit | 80-bit | 128-bit | ||||||||||||||||
| Nível SIMD do conjunto de instruções da CPU | SSE4a | AVX | AVX2 | SSSE3 | AVX | AVX2 | ||||||||||||||
| 3DNow! | — | — | ||||||||||||||||||
| FMA4, LWP, TBM, e XOP | — | — | — | — | ||||||||||||||||
| FMA3 | ||||||||||||||||||||
| Cache L1 de dados por núcleo (KiB) | 64 | 16 | 32 | 32 | ||||||||||||||||
| Associatividade do cache de dados L1 (maneiras) | 2 | 4 | 8 | 8 | ||||||||||||||||
| Caches de instruções L1 por core | 1 | 0.5 | 1 | 1 | 0.5 | 1 | ||||||||||||||
| Cache máximo de instrução L1 total da APU (KiB) | 256 | 128 | 192 | 256 | 64 | 128 | 96 | 128 | ||||||||||||
| Associatividade de cache de instrução L1 (maneiras) | 2 | 3 | 4 | 8 | 2 | 3 | 4 | |||||||||||||
| Caches L2 por core | 1 | 0.5 | 1 | 1 | 0.5 | 1 | ||||||||||||||
| Cache L2 total de APU máximo (MiB) | 4 | 2 | 4 | 1 | 2 | 1 | ||||||||||||||
| Associatividade de cache L2 (maneiras) | 16 | 8 | 16 | 8 | ||||||||||||||||
| Cache L3 total da APU (MiB) | — | 4 | 8 | 16 | — | 4 | ||||||||||||||
| Associatividade de cache APU L3 (maneiras) | 16 | 16 | ||||||||||||||||||
| Esquema de cache L3 | Victim | Victim | ||||||||||||||||||
| Suporte max. de DRAM stock | DDR3-1866 | DDR3-2133 | DDR3-2133, DDR4-2400 | DDR4-2400 | DDR4-2933 | DDR4-3200, LPDDR4-4266 | DDR5-4800, LPDDR5-6400 | DDR3L-1333 | DDR3L-1600 | DDR3L-1866 | DDR3-1866, DDR4-2400 | DDR4-2400 | ||||||||
| Max. de canais DRAM por APU | 2 | 1 | 2 | |||||||||||||||||
| Max. largura de banda DRAM de stock por APU (GB/s) | 29.866 | 34.132 | 38.400 | 46.932 | 68.256 | 102.400 | 10.666 | 12.800 | 14.933 | 19.200 | 38.400 | |||||||||
| Microarquitetura GPU | TeraScale 2 (VLIW5) | TeraScale 3 (VLIW4) | GCN 2nd gen | GCN 3rd gen | GCN 5th gen | RDNA 2nd gen | TeraScale 2 (VLIW5) | GCN 2nd gen | GCN 3rd gen | GCN 5th gen | ||||||||||
| Conjunto de instruções da GPU | Conjunto de instruções TeraScale | Conjunto de instruções GCN | Conjunto de instruções RDNA | Conjunto de instruções TeraScale | Conjunto de instruções GCN | |||||||||||||||
| Clock base da GPU de stock máximo (MHz) | 600 | 800 | 844 | 866 | 1108 | 1250 | 1400 | 2100 | 2400 | 538 | 600 | ? | 847 | 900 | 1200 | |||||
| Max stock GPU base GFLOPS | 480 | 614.4 | 648.1 | 886.7 | 1134.5 | 1760 | 1971.2 | 2150.4 | 3686.4 | 86 | ? | ? | ? | 345.6 | 460.8 | |||||
| Motor 3D | Até 400:20:8 | Até 384:24:6 | Até 512:32:8 | Até 704:44:16 | Até 512:32:8 | 768:48:8 | 80:8:4 | 128:8:4 | Até 192:?:? | Até 192:?:? | ||||||||||
| IOMMUv1 | IOMMUv2 | IOMMUv1 | ? | IOMMUv2 | ||||||||||||||||
| Decodificador de vídeo | UVD 3.0 | UVD 4.2 | UVD 6.0 | VCN 1.0 | VCN 2.1 | VCN 2.2 | VCN 3.1 | UVD 3.0 | UVD 4.0 | UVD 4.2 | UVD 6.0 | UVD 6.3]] | VCN 1.0 | |||||||
| Codificador de vídeo | — | VCE 1.0 | VCE 2.0 | VCE 3.1 | — | VCE 2.0 | VCE 3.1 | |||||||||||||
| Movimento Fluido AMD | ||||||||||||||||||||
| Economia de energia da GPU | PowerPlay | PowerTune | PowerPlay | PowerTune | ||||||||||||||||
| TrueAudio | — | ? | — | |||||||||||||||||
| FreeSync | 1 2 |
1 2 | ||||||||||||||||||
| HDCP | ? | 1.4 | 1.4 2.2 | ? | 1.4 | 1.4 2.2 | ||||||||||||||
| PlayReady | — | 3.0 not yet | — | 3.0 ainda não | ||||||||||||||||
| Telas compatíveis | 2–3 | 2–4 | 3 | 3 (desktop) 4 (mobile, integrado) | 4 | 2 | 3 | 4 | ||||||||||||
/drm/radeon | — | — | ||||||||||||||||||
/drm/amdgpu | — | — | ||||||||||||||||||
A microarquitetura Bifrost da ARM, conforme implementada no Mali-G71, é totalmente compatível com as especificações de hardware HSA 1.1. Em junho de 2016, a ARM não anunciou suporte de software que usaria esse recurso de hardware.