Sobre os compromissos do RISC-V
Em seu livro “Computer Organization and Design”, Patterson e Hennesy expõe três princípios de design acerca de Arquiteturas de Computadores:
1- Simplicidade favorece regularidade
2- Menor é mais rápido
3- Bons designs exigem bons comprometimentos
Como uma ISA destinada para uso geral e duradouro, diversas características de seu design parecem contradizer os princípios apresentados à primeira vista. Porém, ao analisarmos o contexto em que foi concebida, ficará claro como tais contradições aparentes se combinam para formar uma ISA coerente.
Uma breve introdução ao RISC-V
Apesar de ser uma ISA, o RISC-V pode ser visto também como uma especificação para combinar diversos conjuntos de instruções. Isso significa que a informação de que dois chips usam o RISC-V não implica em garantias de intercompatibilidade. É necessário saber qual é o conjunto de instruções (base e extensões) que os chips implementam para definir se um dado software será compatível com ambos. Todo chip vai implementar um conjunto de instruções base, dentre os possíveis temos:
– RV32I: 32 registradores de 32 bits
– RV32E: RV32I com a metade do número de registradores
– RV64I: RV32I com 64 bits de largura e instruções extras para operações com 64 bits
Existem extensões para adicionar o suporte a operações atômicas (“A”), instruções comprimidas (“C”), que representem um conjunto de extensões (“G”), etc. Seguindo uma série de convenções, se obtém uma sigla que representa a todos os conjuntos de instruções que um chip RISC-V implementa, por exemplo: “RV32IMA_Zifencei_Xhwacha” (base: RV32I; extensões: M, A, Zifencei; extensão não padronizadas: Xhwacha).
Apesar de usar por padrão palavras de 32 bits, a arquitetura suporta instruções de tamanhos múltiplos de 16 bits.
Mais detalhes sobre a arquitetura podem ser encontrados na sua especificação oficial disponível em riscv.org.
Compromisso ou comprometimento
O termo compromisso do português não possui um significado idêntico ao do termo compromise do inglês. Dessa forma usaremos ora o termo compromisso ora o termo comprometimento para melhor expressar o significado das frases. Mas de maneira geral, os termos serão usados para expressar a ideia de sacrifícios de design ou escolha com custos.
Identificação de alguns compromissos
O primeiro compromisso claro do RISC-V é o de flexibilidade sobre cobertura. A ISA não busca definir instruções para todas as finalidades possíveis e sim ter o espaço para que elas sejam implementadas e iteradas. Isto implica na possibilidade de que para melhor adequar uma solução de software, certas extensões possam ser exigidas e com isso uma quantia menor de chips suportem tal solução.
O segundo compromisso que contrabalanceia o primeiro é o de compatibilidade e combinação. A extensões devem ser desenhadas de modo que elas sejam autocontidas (salve casos de extensões que estendem outras) para favorecer a combinação com outras extensões existentes. Isso otimiza o desenvolvimento de forma geral, pois partes podem ser removidas ou adicionadas com maior facilidade. Porém o design das extensões torna-se mais complexo já que se deve considerar possíveis interações não esperadas com outras extensões.
O terceiro compromisso do RISC-V é o de iteração e heterogeneidade. As extensões não são rígidas, permitindo que sejam redesenhadas. Isso incentiva uma maior experimentação por parte dos designers e leva a uma heterogeneidade do ecossistema uma vez que soluções mais especializadas são incentivadas.
Existem diversos outros compromissos que o RISC-V assumi, como o de preservar a posição de certos argumentos entre formatos de instruções distintos para simplificar a decodificação das instruções. O último compromisso que abordaremos abrange muitos desse compromissos, o compromisso de ser production ready. Em outras palavras, arquitetura tem o compromisso de tomar certas decisões com base em desempenho e não em estética.
Ligando os princípios com os comprometimentos
O elemento crucial para entender como os compromissos da arquitetura respeitam os princípios propostos é o de que o RISC-V não busca ser apenas uma alternativa ao ARM ou ao AMD64, ele é desenhado com base no cenário atual de computação, onde o uso de hardware especializado é essencial para atender demandas de performance e consumo energético.
Por essa ótica, a simplicidade aparece ao olhar
o sistema como um todo. Um computador moderno (incluindo celulares e
dispositivos) é composto por uma série de hardwares diferentes (CPU, GPU, TPU,
DSP, ...) que muitas vezes operam como caixas pretas da perspectiva do software,
com suas próprias ISAs (muitas vezes não documentadas). Uma solução RISC-V
permite que todos esses hardwares heterogêneos compartilhem a mesma base e com
isso permite que otimizações sejam replicáveis.
A capacidade de escolher quais extensões fazem sentido para determinada solução
pelo compromisso da compatibilidade e combinação permite que a ISA
seja menor e consequentemente mais rápida (mas não
necessariamente a mais rápida nem a menor de todas).
É perceptível que existe uma maior complexidade intrínseca ao RISC-V, mas essa complexidade simplifica a construção de cenários heterogêneos. Essa troca é vista de forma positiva ao observar as tendências atuais e o compromisso de ser production ready o torna viável para que companhias invistam na evolução da tecnologia.
Conclusão
A forma ideal de enxergar o RISC-V é como um conjunto de arquiteturas resultante da aplicação dos princípios apresentados por Patterson e Hennesy ao cenário de computação heterogênea.