O que são e o que fazem as unidades ACE num GPU?

Com a arquitectura Graphics Core Next a AMD fez mudanças radicais à forma de funcionamento das suas placas gráficas. E apareceram as unidades ACE.

Com a sua nova arquitectura GCN a AMD apostou em algo até então ignorado face à performance bruta do processamento gráfico, a capacidade de computação genérica do GPU, conhecida como GPGPU.

Assim a AMD abandonou os seus desenhos baseados na tecnologia de instruções Very Long Instruction Word (VLIW), excelente para grafismo, mas má para computação genérica, e passou a utilizar um design baseado nas mais conhecidas instruções SIMD vectoriais que se revelam igualmente capazes a nível de processamento paralelo, mantendo a capacidade de processamento gráfico, mas elevando bastante as capacidades de processamento genérico do GPU.

GCN

Diga-se que apesar de tal não ser uma ideia geral devido à implementação nas drivers do CUDA da Nvidia, a capacidade de computação genérica das placas AMD é bastante superior às da Nvidia.

Publicidade

Retomando o nosso artigo

GPGPU2 GPGPU

 Mas a unidade fundamental de computação são as Compute Units (CUs). As unidades de processamento vectorial SIMD necessitam de outras unidades funcionais para criarem uma unidade capaz de realizar todo o tipo de operações de computação.

Estas unidades, quando combinadas em quantidade e associadas a outras unidades de gestão, processamento, memória e cache, são o que forma um GPU, sendo os elementos principais do mesmo.

São aliás estes CUs que são responsáveis pela capacidade de processamento de um GPU e são eles que, com as suas características, definem a performance global de um GPU.

GCN2

Mas uma coisa é a performance teórica, outra é a real. Nenhum sistema consegue atingir a sua performance máxima teórica, daí há toda a necessidade de optimizarmos o mesmo para que a sua eficiência suba. Ou seja, optimizações que garantem que mais facilmente chegaremos a esses valores do que aconteceria se elas não existissem.

Nesse sentido os GPUs tem vindo a sofrer enormes evoluções. Actualmente uma Radeon R9-290x trabalha com 44 CUs, num total de 2816 Stream Processors a funcionar em paralelo, o que demonstra que com as devidas optimizações podemos ter números enormes de processadores em paralelo com perdas de performance pelo paralelismo que são reduzidas.

Para conseguir garantir a eficiência destas Compute Units face à evolução da tecnologia, e aumento de stream processors em paralelo, a AMD criou a arquitectura GCN 2.0 usada nas R9-29x. Basicamente uma alteração à GCN 1.1, mas que inclui uma série de acréscimos destinadas à optimização das performances do sistema, nomeadamente com a introdução de um total de 8 Asynchronous Compute Engines (ACEs).

Esta é uma tecnologia partilhada parcialmente e de forma exclusiva com a consola Playstation 4, nomeadamente no que toca ao número e tecnologia usada nos ACEs. A consola implementa ainda outras melhorias de optimização implementadas no GNC 2.0, como o número de Unidades de lógica aritmética por CU (que na PS4 se verifica em 4 dos seus CUs onde temos 2 ALUs em vez da tradicional unidade única), e a inclusão de um bit de memória volátil na cache do GPU que permite modificar selectivamente uma linha de código sem afectar as outras. Estas alterações criam na consola uma arquitectura híbrida que a AMD resolveu agora usar na futura R9-285X que combina a arquitectura GCN 1.1 da R9-280X com algumas optimizações do GCN 2.0.

Publicidade

Retomando o nosso artigo

Mas o que são então as unidades ACE?

Os ACEs, não são unidades de processamento e nem são responsáveis de forma directa pela performance. São unidades que intervêm no processamento genérico, nomeadamente em questões de de ordenação, optimização e regulação de processamento. Ou seja, os ganhos fornecidos são indirectos uma vez que são obtidos pela maior eficiência dos CUs que estas unidades permitem atingir.

Basicamente a arquitectura GCN não é out-of-order. Isto quer que os CUs basicamente processam as instruções pela ordem que elas chegam e não pela ordem que são mais necessárias ou programadas, não podendo ser re-organizadas. Resumidamente, a ineficiência do sistema é tremenda, com processamento secundário a poder ocorrer antes do principal apenas porque sendo menos complexo fica disponível primeiro.

É aqui que entram os ACEs para alterar essa realidade, recebendo os comandos e podendo mudar as suas prioridades e reordena-los fornecendo-os aos CU por uma ordem que optimize o processamento. Esta era uma tarefa antigamente executada parcialmente à mão (por quem o fazia, sendo que era um dos principais factores de optimização de performances), e que estas unidades fazem agora de forma mais dinâmica e ajustável à realidade aplicável a cada momento. Isto permite libertar recursos de memória e GPU mais depressa sem os ter de manter ocupados à espera que as instruções que deveriam ter sido processadas antes, sejam efectivamente processadas.

ACE1

Publicidade

Retomando o nosso artigo

São basicamente gestores das pipelines do sistema mantendo um fluxo constante e melhorando a eficiência de processamento do GPU ao eliminar tempos de espera pela optimização da entrada das linhas de código.

As 8 unidades ACE do GCN 2.0, podem conter e optimizar a ordem de até 64 comandos de processamento, ao passo que as duas unidades usadas na GCN 1.1 apenas podem armazenar e reordenar 16 comandos (8 comandos por ACE).

 r9 290 arquitectura

Resumidamente, e repetindo um pouco, os ACE não são unidades que forneçam rendimento a um GPU. São isso sim unidades que existem para garantir que os GPUs podem mais facilmente atingir as suas performances máximas, garantindo eficiências de processamento superiores. São optimizadores de performance.

A sua presença e capacidades de optimização são, naturalmente, um factor de performance que não é fácil quantificar na comparação de dois GPUs, até porque o ganho oferecido pode ser variável. Mas com eles, pode até dar-se o caso onde um sistema com maior potência máxima teórica possa atingir menores performances globais que outro com uma performance algo menor devido às diferenças existentes neste tipo de optimizações (neste caso o menos potente seria o mais optimizado).

Apenas como curiosidade, os 8 ACE dp GCN 2.0 oferecem 4x maior capacidade de recepção de comandos que os 2 ACE do GCN 1.1. Com o aumento do número de tarefas assincronas e independentes no GPGPU a eficiencia dos ACE vai decaindo uma vez que cada tarefa está a receber comando exclusivos. Assim com 4 tarefas independentes no GPGPU as unidades ACE do GCN 1.1 apenas conseguem separar 4 comandos para cada tarefa. No GCN 2.0 com as mesmas 4 tarefas separam-se 16 comandos por tarefa, ou seja o GCN 2.0 consegue a mesma eficiência original do GCN 1.1 com 4 tarefas a decorrer. Este é o motivo pelo qual a PS4 optimizou 4 dos seus CU, e apenas 4, com características do GCN 2.0 para GPGPU (e daí a habitual referência aos 14+4 CUs da consola). Face ao número de unidades ACE este é o número de CU que na relação performance/custo mais justificava optimizar.

Publicidade

Posts Relacionados