Saltar para o conteúdo

Heterogeneous System Architecture

Origem: Wikipédia, a enciclopédia livre.

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.[1] 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,[2]:3[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).[4]

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.[5] O HSA permite que os programas usem o processador gráfico para cálculos de ponto flutuante sem memória ou agendamento separado.[6]

Justificativa

[editar | editar código-fonte]

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.[2]: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:

Camada intermediária HSA

[editar | editar código-fonte]

HSAIL (Heterogeneous System Architecture Intermediate Language), um conjunto de instruções virtuais para programas paralelos

  • semelhante à LLVM Intermediate Representation e SPIR (usado por OpenCL e Vulkan)
  • finalizado para um conjunto de instruções específico por um compilador JIT
  • tomar decisões tardias sobre quais núcleos devem executar uma tarefa
  • explicitamente paralelo
  • suporta exceções, funções virtuais e outros recursos de alto nível
  • suporte para depuração

Modelo de memória HSA

[editar | editar código-fonte]
  • compatível com modelos de memória C++11, OpenCL, Java e .NET
  • consistência relaxada
  • projetado para oferecer suporte a linguagens gerenciadas (por exemplo, Java) e não gerenciadas (por exemplo, C)
  • tornará muito mais fácil desenvolver compiladores de terceiros para uma ampla gama de produtos heterogêneos programados em Fortran, C++, C++ AMP, Java, et al.

Despachante HSA e tempo de execução

[editar | editar código-fonte]
  • projetado para permitir enfileiramento de tarefas heterogêneo: uma fila de trabalho por núcleo, distribuição de trabalho em filas, balanceamento de carga por roubo de trabalho
  • qualquer núcleo pode agendar trabalho para qualquer outro, incluindo ele mesmo
  • redução significativa da sobrecarga de trabalho de agendamento para um núcleo

Os dispositivos móveis são uma das áreas de aplicação do HSA, na qual ele produz maior eficiência energética.[5]

Diagramas de blocos

[editar | editar código-fonte]

As ilustrações abaixo comparam a coordenação CPU-GPU sob HSA em comparação com arquiteturas tradicionais.

Suporte de software

[editar | editar código-fonte]
As GPUs AMD contêm certas unidades funcionais adicionais destinadas a serem usadas como parte do HSA. No Linux, o driver do kernel amdkfd fornece o suporte necessário.[8][9]

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.[9] Os programas não interagem diretamente com amdkfd, mas enfileiram seus trabalhos utilizando o tempo de execução do HSA.[10] 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.[11]

O suporte integrado para plataformas HSA foi anunciado para o lançamento "Sumatra" do OpenJDK, previsto para 2015.[12]

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.[13]

O GPUOpen abrange algumas outras ferramentas de software relacionadas ao HSA. A versão 2.0 do CodeXL inclui um profiler HSA.[14]

Suporte de hardware

[editar | editar código-fonte]

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+"[15] Zen Zen+ Zen 2 Zen 3 Zen 3+ Bobcat Jaguar Puma Puma+[16] "Excavator+" Zen
ISA x86-64 x86-64
Socket Desktop High-end
Mainstream AM4
Entrada FM1 FM2 FM2+[nota 1]
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[17] 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ó[nota 2] 1 1
Max CPU[nota 3] 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 Yes Yes
IOMMU[nota 4] Yes
BMI1, AES-NI, CLMUL, e F16C Yes
MOVBE Yes
AVIC, BMI2 e RDRAND Yes
ADX, SHA, RDSEED, SMAP, SMEP, XSAVEC, XSAVES, XRSTORS, CLFLUSHOPT, e CLZERO Yes Yes
WBNOINVD, CLWB, RDPID, RDPRU, e MCOMMIT Yes
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[nota 5] AVX AVX2 SSSE3 AVX AVX2
3DNow! Yes
FMA4, LWP, TBM, e XOP Yes Yes
FMA3 Yes Yes
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[18] RDNA 2nd gen TeraScale 2 (VLIW5) GCN 2nd gen GCN 3rd gen[18] 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[nota 6] 480 614.4 648.1 886.7 1134.5 1760 1971.2 2150.4 3686.4 86 ? ? ? 345.6 460.8
Motor 3D [nota 7] Até 400:20:8 Até 384:24:6 Até 512:32:8 Até 704:44:16[19] 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[20] VCN 2.1[21] VCN 2.2[21] 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 Não Yes Não Não Yes Não
Economia de energia da GPU PowerPlay PowerTune PowerPlay PowerTune[22]
TrueAudio Yes[23] ? Yes
FreeSync 1
2
1
2
HDCP[nota 8] ? 1.4 1.4
2.2
? 1.4 1.4
2.2
PlayReady[nota 9] 3.0 not yet 3.0 ainda não
Telas compatíveis[nota 10] 2–3 2–4 3 3 (desktop)
4 (mobile, integrado)
4 2 3 4
/drm/radeon[nota 11][25][26] Yes Yes
/drm/amdgpu[nota 12][27] Yes[28] Yes[28]
  1. Para modelos Excavator FM2+: A8-7680, A6-7480 e Athlon X4 845.
  2. Um PC seria um nó.
  3. Uma APU combina uma CPU e uma GPU. Ambos têm núcleos.
  4. Requer suporte de firmware
  5. No SSE4. No SSSE3.
  6. O desempenho de precisão simples é calculado a partir da velocidade de clock do núcleo base (ou boost) com base em uma operação FMA.
  7. Shaders unificados : unidades de mapeamento de textura : unidades de saída de renderização
  8. Para reproduzir conteúdo de vídeo protegido, também é necessário suporte a placa, sistema operacional, driver e aplicativo. Um monitor HDCP compatível também é necessário para isso. O HDCP é obrigatório para a saída de certos formatos de áudio, colocando restrições adicionais na configuração multimídia.
  9. Para reproduzir conteúdo de vídeo protegido, também é necessário suporte a placa, sistema operacional, driver e aplicativo. Um monitor HDCP compatível também é necessário para isso. O HDCP é obrigatório para a saída de certos formatos de áudio, colocando restrições adicionais na configuração multimídia.
  10. Para alimentar mais de dois monitores, os painéis adicionais devem ter suporte nativo para DisplayPort.[24] Alternativamente, adaptadores DisplayPort-to-DVI/HDMI/VGA ativos podem ser empregados.
  11. DRM (Direct Rendering Manager) é um componente do kernel Linux. O suporte nesta tabela refere-se à versão mais atual.
  12. DRM (Direct Rendering Manager) é um componente do kernel Linux. O suporte nesta tabela refere-se à versão mais atual.


A microarquitetura Bifrost da ARM, conforme implementada no Mali-G71,[29] é 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.

Referências

  1. Tarun Iyer (30 de abril de 2013). «AMD Unveils its Heterogeneous Uniform Memory Access (hUMA) Technology». Tom's Hardware. Consultado em 30 de abril de 2025 
  2. a b George Kyriazis (30 de abril de 2025). Heterogeneous System Architecture: A Technical Review (PDF) (Relatório). AMD. Arquivado do original (PDF) em 28 de março de 2014 
  3. «What is Heterogeneous System Architecture (HSA)?». AMD. Consultado em 30 de abril de 2025. Arquivado do original em 21 de junho de 2014 
  4. Joel Hruska (26 de agosto de 2013). «Setting HSAIL: AMD explains the future of CPU/GPU cooperation». ExtremeTech. Ziff Davis. Consultado em 30 de abril de 2025 
  5. a b «Heterogeneous System Architecture: Purpose and Outlook». gpuscience.com. 9 de novembro de 2012. Consultado em 30 de abril de 2025. Cópia arquivada em 1 de fevereiro de 2014 
  6. «Heterogeneous system architecture: Multicore image processing using a mix of CPU and GPU elements». Embedded Computing Design. Consultado em 30 de abril de 2025. Cópia arquivada em 26 de março de 2013 
  7. «Kaveri microarchitecture». SemiAccurate. 15 de janeiro de 2014 
  8. Michael Larabel (21 de julho de 2014). «AMDKFD Driver Still Evolving For Open-Source HSA On Linux». Phoronix. Consultado em 30 de abril de 2025 
  9. a b «Linux kernel 3.19, Section 1.3. HSA driver for AMD GPU devices». kernelnewbies.org. 8 de fevereiro de 2015. Consultado em 30 de abril de 2025 
  10. «HSA-Runtime-Reference-Source/README.md at master». github.com. 14 de novembro de 2014. Consultado em 30 de abril de 2025 
  11. «Linux Kernel 4.14 Announced with Secure Memory Encryption and More». 13 de novembro de 2017. Consultado em 30 de abril de 2025. Arquivado do original em 13 de novembro de 2017 
  12. Alex Woodie (26 de agosto de 2013). «HSA Foundation Aims to Boost Java's GPU Prowess». HPCwire. Consultado em 30 de abril de 2025 
  13. «Bolt on github». GitHub. 11 de janeiro de 2022. Consultado em 30 de abril de 2025 
  14. AMD GPUOpen (19 de abril de 2016). «CodeXL 2.0 includes HSA profiler». Consultado em 30 de abril de 2025. Arquivado do original em 27 de junho de 2018 
  15. «AMD Announces the 7th Generation APU: Excavator mk2 in Bristol Ridge and Stoney Ridge for Notebooks». 31 de maio de 2016. Consultado em 17 de setembro de 2022 
  16. «AMD Mobile "Carrizo" Family of APUs Designed to Deliver Significant Leap in Performance, Energy Efficiency in 2015» (Nota de imprensa). 20 de novembro de 2014. Consultado em 17 de setembro de 2022. Cópia arquivada em 10 de fevereiro de 2015 
  17. «The Mobile CPU Comparison Guide Rev. 13.0 Page 5 : AMD Mobile CPU Full List». TechARP.com. Consultado em 17 de setembro de 2022 
  18. a b «AMD VEGA10 and VEGA11 GPUs spotted in OpenCL driver». VideoCardz.com. Consultado em 17 de setembro de 2022 
  19. Cutress, Ian (1 de fevereiro de 2018). «Zen Cores and Vega: Ryzen APUs for AM4 – AMD Tech Day at CES: 2018 Roadmap Revealed, with Ryzen APUs, Zen+ on 12nm, Vega on 7nm». Anandtech. Consultado em 17 de setembro de 2022 
  20. Larabel, Michael (17 de novembro de 2017). «Radeon VCN Encode Support Lands in Mesa 17.4 Git». Phoronix. Consultado em 19 de setembro de 2022 
  21. a b «AMD Ryzen 5000G 'Cezanne' APU Gets First High-Res Die Shots, 10.7 Billion Transistors In A 180mm2 Package». wccftech. 12 de agosto de 2021. Consultado em 19 de setembro de 2022 
  22. Tony Chen; Jason Greaves, «AMD's Graphics Core Next (GCN) Architecture» (PDF), AMD, consultado em 19 de setembro de 2022 
  23. «A technical look at AMD's Kaveri architecture». Semi Accurate. Consultado em 19 de setembro de 2022 
  24. «How do I connect three or More Monitors to an AMD Radeon™ HD 5000, HD 6000, and HD 7000 Series Graphics Card?». AMD. Consultado em 19 de setembro de 2022. Cópia arquivada em 11 de dezembro de 2014 
  25. Airlie, David (26 de novembro de 2009). «DisplayPort supported by KMS driver mainlined into Linux kernel 2.6.33». Consultado em 19 de setembro de 2022 
  26. «Radeon feature matrix». freedesktop.org. Consultado em 19 de setembro de 2022 
  27. Deucher, Alexander (16 de setembro de 2015). «XDC2015: AMDGPU» (PDF). Consultado em 19 de setembro de 2022 
  28. a b Michel Dänzer (17 de novembro de 2016). «[ANNOUNCE] xf86-video-amdgpu 1.2.0». lists.x.org 
  29. «ARM Bifrost GPU Architecture». 30 de maio de 2016. Consultado em 30 de abril de 2025 

Ligações externas

[editar | editar código-fonte]
O Commons possui uma categoria com imagens e outros ficheiros sobre Heterogeneous System Architecture