Arquitetura de sistema heterogênea ou sobre atender a CPU e GPU
Durante muito tempo, o desenvolvimento da microeletrônica ocorreu sob o lema "menos e mais rápido". O processo técnico foi reduzido, novos elementos da arquitetura x86 foram introduzidos (conjuntos de extensões de instruções) e a frequência de clock do núcleo de computação foi aumentada. Quando o crescimento da produtividade “bruta” se baseou em fatores econômicos e físicos, vários métodos de computação paralelizada se tornaram populares. Ao mesmo tempo, não estavam apenas desenvolvendo CPUs que apresentavam bom desempenho em cálculos complexos e de thread único, mas também GPUs capazes de executar rapidamente um grande número de tarefas semelhantes e simples que eram difíceis de executar aos processadores convencionais.
Hoje estamos entrando em uma nova era no desenvolvimento de chips que são responsáveis pela computação no coração de desktops, servidores, dispositivos móveis e eletrônicos vestíveis. Ao combinar as abordagens ao processamento de informações na CPU e na GPU, desenvolvemos uma nova arquitetura aberta, sem a qual a implementação adicional da mesma lei de Moore parece difícil. Conheça HSA - Arquitetura de Sistema Heterogêneo.Um momento histórico
Para entender completamente como o HSA, por um lado, é próximo e, por outro lado, ultrapassa a arquitetura das soluções modernas, vejamos a história. Mesmo se descartamos décadas de tecnologia de lâmpadas e começamos a partir dos anos 1950, a partir do momento em que os transistores apareceram na microeletrônica, a história é tal que você pode escrever um artigo separado. Vamos analisar brevemente os principais "marcos" da indústria de processadores e muito pouco sobre a história das placas de vídeo.No início da engenharia da computação, as CPUs eram bastante simples. De fato, todas as operações se resumiram à adição de números em um sistema binário. Quando foi necessário subtrair, o chamado " Códigos reversos": Eram simples e fáceis de encaixar" ferro ", sem exigir as delícias arquitetônicas mais complicadas que implementam a subtração" honesta "dos números. Para cada modelo de computador, os programas foram escritos separadamente até 1964.
Sistema ibm / 360Em 1964, a IBM lançou o System / 360, um computador que mudou a maneira como criamos processadores. Provavelmente, foi ele quem teve a honra de introduzir um conceito como arquitetura de sistema. Só porque antes dele não havia "sistema". O fato é que, antes do System / 360, todos os computadores dos anos 50 e 60 trabalhavam apenas com o código do programa criado especificamente para eles. A IBM, por outro lado, desenvolveu o primeiro conjunto de instruções, suportado em uma variedade de configurações (e desempenho), mas com a mesma arquitetura do sistema / 360. A propósito, no mesmo computador, o byte pela primeira vez tornou-se 8 bits. Antes disso, em quase todos os computadores populares, consistia em seis bits.A segunda grande inovação nos anos 60 foi o desenvolvimento do DEC. Em seu computador PDP-8, eles usaram uma arquitetura extremamente simples para a época, contendo apenas quatro registros de 12 bits cada e um pouco mais de 500 blocos de CPU. Aqueles "transistores" que já foram medidos na década de 1970 aos milhares e aos bilhões na década de 2000. Essa simplicidade e a criação pela IBM de um conceito como um "conjunto de instruções" determinaram a direção adicional do desenvolvimento da tecnologia da computação.O boom da microeletrônica começou nos anos 70. Tudo começou com a produção dos primeiros processadores de chip único: muitas empresas produziram chips sob licença e os aprimoraram, adicionando novas instruções e expandindo os recursos.Desde meados dos anos 70, o mercado de processadores de 8 bits estava lotado e, no final da década, surgiram soluções acessíveis de 16 bits em computadores, trazendo consigo a arquitetura x86, que (embora com melhorias significativas) ainda está viva e bem. O principal flagelo que interrompeu o desenvolvimento de processadores de 16 bits na época foi o "confinamento" dos fabricantes na produção dos chamados chips de suporte para arquiteturas de 8 bits. Juntos, eles criaram o que mais tarde foi chamado de pontes “norte” e “sul”.No início dos anos 80, cansados de lutar com a inércia do mercado, muitos fabricantes transferiram parte dos "chips de suporte" de controle para dentro do próprio processador. Posteriormente, algo do processador vai para os chipsets da placa-mãe e depois volta, mas mesmo assim, essa arquitetura era um pouco semelhante aos SoCs modernos.O meio e o final dos anos 80 passaram sob a bandeira da transição para o endereçamento de memória de 32 bits e núcleos de processador de 32 bits. A lei de Moore funcionou como antes: o número de transistores aumentou, a freqüência do clock e o desempenho do processador "bruto" aumentaram.Em 1991, os processadores AMD Am386DX e Am386SX viram a luz, cujo desempenho era comparável à próxima geração de sistemas (486). O Am386SX é considerado por muitos como o primeiro desenvolvimento independente da empresa e o ponto de partida para quase 15 anos de domínio no mercado de PCs domésticos e estações de trabalho de alto desempenho. Sim, era arquitetonicamente um clone do chip i368SX, mas tinha um processo técnico mais baixo, eficiência energética 35% melhor e, ao mesmo tempo, trabalhava com uma freqüência de clock mais alta que seu progenitor, mas era mais barato.
Os próprios anos 90 foram bastante ricos tanto em eventos no campo da microeletrônica quanto no rápido crescimento do mercado. Foi nos anos 90 que a AMD começou a ser considerada uma das empresas mais sérias do mercado, já que nossos processadores em termos de preço e taxa de desempenho muitas vezes deixavam seus concorrentes fora do Intel Pentium, especialmente no segmento doméstico. Um conjunto expandido de instruções (MMX / 3DNow!), O aparecimento de um cache de segundo nível, uma diminuição agressiva na tecnologia do processo, um aumento na velocidade do relógio ... e agora o novo milênio já está no quintal.Em 2000, os processadores AMD pela primeira vez no mundo cruzaram a linha a 1 GHz e, um pouco mais tarde, a mesma arquitetura K7 também assumiu uma nova altura - 1,4 GHz.No final de 2003, lançamos novos processadores baseados na arquitetura K8, que continha três inovações importantes: endereçamento de memória de 64 bits, um controlador de memória integrado e o barramento HyperTransport, que fornecia largura de banda incrível na época (até 3,2 GB / s).Em 2005, os primeiros processadores de núcleo duplo apareceram (a Intel possui dois núcleos de cristal separados em um substrato, a AMD possui dois núcleos dentro de um cristal, mas com uma memória cache separada).Após alguns anos de desenvolvimento natural, a arquitetura K8 foi substituída por uma nova (K10). O número de núcleos em um chip na configuração máxima aumentou para seis; um cache geral do terceiro nível apareceu. E o desenvolvimento adicional foi mais quantitativo e qualitativo do que revolucionário. Mais megahertz, mais núcleos, melhor otimização, menor consumo de energia, processo de fabricação mais fino, unidades internas aprimoradas como um preditor de ramificação, controlador de memória e decodificador de instruções.O que nos interessa na evolução da GPU (como parte do artigo da HSA) pode ser descrito muito brevemente. Com a proliferação de computadores como soluções universais de trabalho e entretenimento em casa, os jogos de computador cresceram em popularidade. Juntamente com ele, aumentaram as possibilidades de gráficos 3D, exigindo cada vez mais "infusão" de músculos diante dos aceleradores de vídeo. O uso de microprogramas e shaders especiais tornou possível implementar iluminação realista com relativamente pouco sangue em gráficos 3D. Inicialmente, os processadores shader eram divididos em vértices e pixels (os primeiros eram responsáveis por trabalhar com geometria, os segundos por texturas), depois uma arquitetura unificada de shader e, consequentemente, surgiam processadores universais de shader capazes de executar códigos para os vértices e pixel shaders.GPGPU, computação de uso geral em um acelerador gráfico pode ser implementada usando padrão aberto e OpenCL, ou um dialeto um pouco simplificado de C.Desde então, das principais inovações na GPU, podemos apenas mencionar a aparência da API Mantle de baixo nível, que permite acessar placas gráficas AMD sobre esse assunto. no mesmo nível que o acesso a aceleradores gráficos nos consoles PS4 e Xbox One) e o aumento explosivo na capacidade de memória da GPU nos últimos dois anos.
Este é o fim da história, é hora de passar para o mais interessante: HSA.O que é HSA?
Quero começar com o fato de que a HSA, em primeiro lugar, é uma plataforma aberta com base na qual os fabricantes de microeletrônicos podem construir seus produtos (independentemente do conjunto de instruções usadas) que cumpram certos princípios e regras gerais.Ao mesmo tempo, o HSA é uma arquitetura de processador que combina cálculos escalares em núcleos clássicos de CPU, cálculos paralelos em massa em GPUs e trabalha com processamento de sinal em módulos DSP e os conecta usando acesso coerente à RAM. Ou seja, toda a história da produção de processadores e vídeos na HSA converge em um ponto: quase 50 anos de progresso no campo da microeletrônica levaram à criação de uma combinação lógica dos melhores aspectos de vários sistemas.O desenvolvimento da arquitetura x86 e dos processadores possibilitou a criação de módulos de processador altamente eficientes que fornecem tarefas comuns e baixo consumo de energia.A unificação dos processadores shader no núcleo da GPU e a simplificação geral da programação para um sistema com um grande número de módulos de execução paralelos deram à GPGPU uma maneira e usam o poder de processamento das placas de vídeo nas áreas em que os aceleradores de hardware separados eram usados anteriormente, o que não conquistou nenhuma participação tangível no mercado. fique à tona.
Um controlador de memória integrado, barramento PCIe e sistema de E / S forneceram acesso transparente à memória para vários módulos HSA.Finalmente, o DSP integrado permite remover a carga da CPU e da GPU ao trabalhar com conteúdo de vídeo e áudio, pois é baseado em hardware no trabalho de codificação e decodificação dos sinais correspondentes.Todos esses módulos juntos abrangem todo o espectro de tarefas modernas, e o HSA permite que você ensine programas de forma transparente e fácil a trabalhar com toda a gama de recursos de hardware disponíveis usando ferramentas clássicas, como linguagens como Java e C ++.Razões para criar HSA
As realidades modernas (a disseminação de eletrônicos portáteis e móveis, questões econômicas e ambientais) criaram certas tendências no desenvolvimento de microeletrônica: reduzindo o consumo de energia de todos os dispositivos, sejam smartphones ou servidores, aumentando a produtividade, melhorando o trabalho com reconhecimento de padrões.O primeiro, em princípio, é compreensível. Todo mundo quer que o gadget funcione por mais tempo, o gabinete não era grosso com o Big Mac e não era aquecido como uma frigideira em um fogão. Os proprietários dos data centers têm muitos problemas para remover o calor e garantir energia ininterrupta, para carregá-los com watts extras de pacotes de calor, o que significa aumentar o custo de seus serviços. Hospedagem mais cara - mais publicidade em seus recursos favoritos, mais carga de CPU nos dispositivos, maior consumo de energia, menos bateria.Hoje, o aumento da produtividade é simplesmente um dado adquirido. As pessoas estão acostumadas ao fato de que, desde os anos 70, os processadores quebram recordes de desempenho todos os anos, os jogos estão ficando mais bonitos, os sistemas e o software são mais complexos (e ao mesmo tempo não perdem a velocidade visual), e as ferramentas modernas de programador contêm cada vez mais camadas de abstração de ferro , cada uma com um desempenho real.Bem, desenvolvimentos modernos no campo de assistentes inteligentes, assistentes virtuais e perspectivas de desenvolvimento de inteligência artificial simplesmente requerem reconhecimento normal da fala humana, expressões faciais, gestos, o que, por sua vez, exige um aumento no desempenho direto e na otimização das operações de decodificação de áudio e áudio fluxo de vídeo.Todos esses problemas seriam resolvidos por uma arquitetura de hardware universal implementada na forma de SoC, e combinando os encantos de CPUs e GPUs clássicas, distribuindo competentemente operações seriais e paralelas entre os módulos capazes de executar as tarefas correspondentes com mais eficiência.Mas como ensinar software a trabalhar com toda essa magnificência dos recursos de computação?Principais recursos de um sistema heterogêneo
Os programadores não devem ter problemas para acessar os recursos de computação desse sistema. Para fazer isso, o HSA possui vários recursos importantes que simplificam o trabalho dos desenvolvedores de software e aproximam o HSA dos sistemas clássicos em termos de desenvolvimento:- Endereçamento unificado para todos os processadores;
- Coerência total da memória;
- Operações no sistema de memória de páginas;
- Modo de envio personalizado;
- Gerenciamento de filas no nível da arquitetura;
- Suporte de linguagem de alto nível para processadores de computação - GPU;
- Mudança de contexto e multitarefa preventiva.
O desenvolvedor de aplicativos não precisa entender linguagens de programação de baixo nível: componentes padrão, uma linguagem intermediária simples, interfaces de interação e hardware estão disponíveis para o desenvolvedor, e memória coerente e como as tarefas serão distribuídas entre os módulos de computação são facilmente ocultas "sob o capô".O papel do endereçamento de memória unificada dificilmente pode ser superestimado. Formalmente, sem ele, não haveria HSA. Não importa onde os dados estão localizados na memória, quantos núcleos, módulos, unidades de computação você possui. Você move o ponteiro e executa cálculos e não "transfere" bytes de um atuador para outro. A carga do cache é reduzida e o controle do próprio processador é simplificado. A abstração da memória no nível da plataforma permitirá o uso do mesmo código para diferentes plataformas, simplificando a vida dos desenvolvedores de software.Dificuldades do OpenCL e C ++ AMP
Programar para sistemas paralelos não é uma tarefa fácil. Para facilitar a vida dos desenvolvedores, desenvolvemos a biblioteca Bolt, que fornece padrões eficazes para os modelos mais usados para classificação, redução, varredura e transformação de dados usando computação paralela.Para acelerar o código Java sem reescrevê-lo no OpenCL, é usada uma biblioteca AparApi especial (código aberto), que permite converter o bytecode Java em OpenCL com suporte para computação paralela nos núcleos da CPU e GPU.No futuro, está planejado finalizar o Aparapi, primeiro associando-o ao HSAIL e adicionando um otimizador especial. No final, o HSA deve trabalhar com aceleração heterogênea diretamente através da máquina Java, transparente para o usuário e o programador.Já dissemos que o HSA é uma plataforma aberta. APIs e especificações são fornecidas gratuitamente pelo desenvolvedor, e o próprio HSA é independente do conjunto de instruções da CPU ou GPU.Para garantir a compatibilidade das soluções de hardware de vários fornecedores, criamos nosso próprio kit ISA: HSAIL (HSA Intermediate Layer), que garante a operação do software, independentemente do que esteja dentro da solução HSA. A própria camada intermediária suporta o trabalho com exceções, funções virtuais, modelos de memória de linguagens modernas, portanto, não são esperados problemas com o suporte a C ++, Java e .Net, enquanto os desenvolvedores podem acessar o hardware diretamente e usar bibliotecas de otimização prontas O HSA, que distribuirá tarefas independentemente e simplificará a comunicação com o hardware, simplificando o trabalho do programador.
Componente de hardware
Não apenas a AMD está viva HSA. É importante para os desenvolvedores que, uma vez que o código escrito funcione igualmente bem em diferentes dispositivos. Alguém usa linguagens de programação de alto nível como C ++ ou Java para isso, mas sugerimos trabalhar em um nível inferior. Por um lado, aplicativos clássicos podem ser executados em dispositivos HSA como se nada tivesse mudado. Os sistemas operacionais fornecerão aos aplicativos antigos acesso fácil e claro ao núcleo do processador, memória e vídeo. Por outro lado, o HSAIL permite extrair toda a energia do novo SoC, e os desenvolvedores podem criar aplicativos de alto desempenho e economia de recursos tão facilmente quanto para os pacotes clássicos de SO e hardware. FundaçãoNow HSAExistem sete empresas fundadoras dessa organização: AMD, ARM, Imagination Technologies, MediaTek, Texas Instruments, Samsung Electronics e Qualcomm®.A padronização no campo de distribuição de tarefas entre núcleos de computação, transferência de ponteiros de dados e memória, trabalhando com os principais elementos da plataforma usando o HSAIL permite que os fornecedores usem sua experiência no campo do ferro, e os desenvolvedores não precisam se preocupar com o que está por trás. Os aplicativos baseados no HSAIL funcionarão em qualquer plataforma.Prós e contras de soluções de hardware baseadas em HSA
A arquitetura heterogênea permite combinar os recursos da CPU e da GPU, e essa é sua principal vantagem. Ao mesmo tempo, o HSA cuida da energia consumida, sem carregar o processador com cálculos muito mais eficientes para executar na GPU.
Hoje, a simulação da física do estado sólido é usada em todos os lugares: de jogos de computador e pacotes 3D a CAD, simuladores para médicos, militares e atletas. O trabalho na CPU desse sistema geralmente não é ideal, porque requer numerosos, mas simples cálculos. E quando o número de objetos em interação excede centenas ou até milhares, as CPUs clássicas simplesmente não conseguem fornecer a quantidade apropriada de cálculos. Mas a arquitetura da GPU é adequada para esses cálculos o melhor possível. E o endereçamento unificado, a memória da página e a coerência completa permitem transferir os cálculos para o hardware apropriado com o mínimo de recursos e recursos do desenvolvedor.O desempenho do HSA em tarefas gerais geralmente é maior que o das CPUs clássicas e maior do que o pacote de CPU + GPU devido ao fato de que, independentemente de quão ideais sejam os drivers, copiar dados da memória compartilhada na memória da GPU e enviar os resultados dos cálculos mais tempo que os próprios cálculos.O HSA já é mais rápido que os sistemas clássicos, mas pode funcionar ainda melhor. Na verdade, o único menos atual do sistema é que ele é novo. A popularidade está apenas começando a crescer, novos modelos de ferro nas condições econômicas mais desfavoráveis entram no mercado mais lentamente, e a popularidade da HSA não está crescendo no mesmo ritmo que todos gostaríamos. Assim que os desenvolvedores experimentarem, entenderem as vantagens do HSA e a simplicidade de desenvolvimento de um novo sistema e começarem a dar suporte nativo à arquitetura heterogênea em seus aplicativos, veremos o surgimento de novos aplicativos de alto desempenho para servidores, computadores clássicos e dispositivos móveis. Source: https://habr.com/ru/post/pt387439/
All Articles