2 pontos por GN⁺ 2025-01-04 | 1 comentários | Compartilhar no WhatsApp
  • XiangShan(香山) é um projeto open source voltado a processadores RISC-V de alto desempenho, e a versão atual Kunminghu(昆明湖) está em desenvolvimento no branch master
  • A documentação está disponível em docs.xiangshan.cc, e os documentos de projeto do Kunminghu V2R2 e o guia do usuário são fornecidos separadamente
  • As microarquiteturas estáveis são Yanqihu(雁栖湖) e Nanhu(南湖), sendo Yanqihu a primeira microarquitetura estável, desenvolvida desde junho de 2020
  • O fluxo de desenvolvimento é composto por código de projeto em Scala, transformação FIRRTL, subsistema de cache, framework de cossimulação difftest e imagens de simulação pré-compiladas
  • O projeto oferece caminhos para geração de Verilog, execução de simulador baseado em Verilator e execução via xspdb, permitindo realizar a geração do design e a simulação de programas dentro do próprio projeto

Visão geral do projeto

  • XiangShan(香山) é um projeto open source de processador RISC-V de alto desempenho
  • A descrição em chinês é fornecida em um README separado
  • A documentação do projeto pode ser vista em docs.xiangshan.cc
  • A documentação de projeto do XiangShan para Kunminghu V2R2 está publicada separadamente em docs.xiangshan.cc/projects/design
  • O guia do usuário do XiangShan está disponível em docs.xiangshan.cc/projects/user-guide e XiangShan-User-Guide/releases
  • A tradução da documentação usa Weblate e aceita contribuições de tradução em inglês e outros idiomas
  • Toda a documentação do XiangShan segue a licença CC-BY-4.0

Artigos publicados e metodologia de desenvolvimento

  • O artigo da MICRO 2022 “Towards Developing High Performance RISC-V Processors Using Agile Methodology” trata do XiangShan e da aplicação de metodologia ágil no desenvolvimento de processadores RISC-V de alto desempenho
  • O artigo aborda as ferramentas desenvolvidas e usadas para acelerar o processo de desenvolvimento de chips
    • Projeto
    • Verificação funcional
    • Depuração
    • Verificação de desempenho
  • O artigo recebeu os três selos da avaliação de artefatos: Available, Functional e Reproduced
  • Links de material:

Versões de microarquitetura

  • A primeira microarquitetura estável é Yanqihu(雁栖湖), disponível no branch yanqihu
    • Em desenvolvimento desde junho de 2020
  • A segunda microarquitetura estável é Nanhu(南湖), disponível no branch nanhu
  • A versão atual também é chamada de Kunminghu(昆明湖) e ainda está em desenvolvimento no branch master
  • O README inclui um diagrama de visão geral da microarquitetura Kunminghu

Estrutura do repositório

  • Os principais diretórios são divididos em código de projeto, scripts de desenvolvimento, submódulos, cache, cossimulação e imagens de execução
  • src/main/scala: local dos arquivos de projeto
    • device: dispositivos virtuais para simulação
    • system: wrapper de SoC
    • top: módulo de topo
    • utils: código utilitário
    • xiangshan: código principal do projeto
    • xiangshan/transforms: transformações FIRRTL úteis
  • scripts: scripts para desenvolvimento ágil
  • yunsuan: submódulo yunsuan do XiangShan
  • XSCache: subsistema de cache do XiangShan
  • difftest: framework de cossimulação difftest
  • ready-to-run: imagens de simulação pré-compiladas

IDE e geração de Verilog

  • A configuração do BSP é feita com make bsp
  • A configuração do IDEA é feita com make idea
  • O código Verilog é gerado com make verilog
    • Vários arquivos .sv são gerados na pasta build/rtl/
    • Um arquivo de exemplo é build/rtl/XSTop.sv
    • Para mais informações, consulte o Makefile

Execução de simulação

  • Para executar programas na simulação, são necessários variáveis de ambiente e ferramentas de dependência
  • Etapas de preparação:
    • Definir NEMU_HOME como o caminho absoluto do projeto NEMU
    • Definir NOOP_HOME como o caminho absoluto do projeto XiangShan
    • Definir AM_HOME como o caminho absoluto do projeto AM
    • Instalar mill
    • Clonar o projeto e inicializar os submódulos com make init
  • Simulador baseado em Verilator:
    • É necessário instalar Verilator
    • Compila o simulador C++ baseado em Verilator ./build/emu com make emu
    • Os argumentos de execução podem ser vistos em ./build/emu --help
    • Para mais informações, consulte Makefile e verilator.mk
  • Exemplo de execução:
    • make emu CONFIG=MinimalConfig EMU_THREADS=2 -j10
    • ./build/emu -b 0 -e 0 -i ./ready-to-run/coremark-2-iteration.bin --diff ./ready-to-run/riscv64-nemu-interpreter-so

Caminho de execução do xspdb

  • O xspdb pode ser usado de duas formas
  • Início rápido com binário pré-compilado:
    • Não requer compilação e pode ser executado apenas com um ambiente Python padrão
    • Oferece a experiência completa do XiangShan com baixo uso de memória
    • A versão mais recente do XSPdb pode ser baixada no resumo de execução do workflow Actions do repositório
  • Build a partir do código-fonte:
    • Requer a instalação da ferramenta de verificação picker, que oferece suporte a linguagens de alto nível
    • Compila o binário Python do XiangShan com make pdb
    • Executa o binário do XiangShan com make pdb-run
  • O exemplo de interação com xspdb inclui carregamento do binário, configuração de watchpoint no PC de commit, execução passo a passo por instrução, exibição das informações de PC e execução até o ponto de término do binário

Solução de problemas, comunidade e licença

  • A documentação de solução de problemas está disponível no Troubleshooting Guide
  • Canais de contato:
  • A implementação foi inspirada em vários artigos fundamentais, e a lista de artigos relacionados está na seção Acknowledgements da documentação do XiangShan
  • A atribuição de copyright inclui as seguintes instituições
    • 2020-2025 Institute of Computing Technology, Chinese Academy of Sciences
    • 2021-2025 Beijing Institute of Open Source Chip
    • 2020-2022 Peng Cheng Laboratory
  • O XiangShan segue a licença Mulan PSL v2

1 comentários

 
GN⁺ 2025-01-04
Opiniões no Hacker News
  • Se você quiser fazer uma simulação, dá para criar um ambiente baseado no Ubuntu 24.04 com o Dockerfile que eu uso
    Ele clona OpenXiangShan/xs-env e passa pela instalação das ferramentas, instalação do Verilator, inicialização do XiangShan, build do DRAMsim3, build do emulador DefaultConfig e até o build do exemplo nexus-am/apps/hello
    São necessários 64 GB de RAM; no meu caso, funcionou com 16 GB de RAM e mais 48 GB de swap. Pode haver etapas duplicadas, mas, na última vez que tentei, foi esse método que deu certo

    • Fico curioso para saber por que usa tanta memória
  • Este projeto foi o primeiro em um bom tempo que realmente mexeu com a minha cabeça, porque alguns interesses recentes se encaixaram de um jeito curioso
    Mas, mesmo dando só uma olhada bem rápida, passei a ter muita empatia por usuários não anglófonos. O README é suficientemente amigável para quem fala inglês, mas, enquanto eu lia, parecia que eu precisava ficar trocando mentalmente os nomes dos tokens para acompanhar, e nesse processo percebi duas coisas
    Primeiro, lembrei por que não consigo terminar literatura russa clássica: desde o começo aparecem nomes que não fazem parte do conjunto de nomes com que estou familiarizado, e eu me perco como se fossem cache misses
    Segundo, parece que usuários anglófonos quase nunca precisaram desenvolver esse músculo cultural. Isso porque o planeta já usa o inglês há bastante tempo como uma espécie de língua franca, e também me veio à cabeça a piada: “como se chama alguém que fala só uma língua? monolíngue… brincadeira, americano”
    Parece viável que “americanos como eu” mantenham um registro público que pré-processe tokens em documentação e código-fonte. Um registro de definições no estilo DefinitelyTyped seria algo bem de nicho, mas bastante útil

    • Quando você se sente mal por ser monolíngue, há um texto dizendo que, em vez de perguntar “quantas línguas você sabe?”, uma pergunta mais justa seria “qual porcentagem das línguas faladas por mais de 5 milhões de pessoas em um raio de cerca de 1.000 milhas de onde você mora você conhece?”
      https://structuredprocrastination.com/light/biling.php
  • https://github.com/OpenXiangShan/XiangShan-doc/blob/main/doc...
    A lista de instruções fusionadas é meio incomum. Tirando as correspondentes a SH{1,2,3,4}ADD, eu não esperava as outras
    Estou lendo com o Google Translate, mas também não vejo ali a execução condicional de saltos curtos no estilo da SiFive

    • Fico curioso para saber se a própria organização do RISC-V mantém em algum lugar uma lista ou documentação de sequências recomendadas de fusão de instruções
      O wiki técnico que eles usam é bem difícil de navegar e pesquisar, e os repositórios não oficiais no GitHub não são muito melhores, então é difícil até saber se isso existe
  • Publiquei o link deste projeto também algumas semanas atrás; é realmente interessante ver esse tipo de projeto acadêmico
    Para quem tiver interesse, o blog quinzenal está linkado aqui, e algumas partes também estão disponíveis em inglês: https://docs.xiangshan.cc/zh-cn/latest/blog/

  • Gosto do fato de os nomes das microarquiteturas seguirem um tema de lagos, como Yanqihu (Lago Yanqi), Nanhu (Lago Nan) e Kunminghu (Lago Kunming)
    Coffee Lake? Skylake? Não: Kunming Lake
    https://en.m.wikipedia.org/wiki/List_of_Intel_codenames

  • Vale notar que a China está avançando bastante em IA, robótica e processadores, e também é impressionante que grande parte disso esteja sendo disponibilizada como open source
    Excelente trabalho e inspirador

    • RISC-V já não é, por definição, software livre e de código aberto?
    • É bem possível que o próprio fato de ser open source faça parte dos fatores de sucesso
      A cultura chinesa é construída em torno de reprodução contínua e melhorias incrementais, algo que remonta pelo menos à época de Confúcio. Algumas pessoas veem isso como cópia indiscriminada, mas, na prática, está mais próximo de aprender profundamente e ficar sobre os ombros dos outros
      Essa atitude de “faça um fork” combina muito bem com open source, embora naturalmente possa ser irritante para licenças de propriedade intelectual ou patentes
      Ainda assim, essa abertura não significa que ela se estenda facilmente para fora da China, especialmente fora da cultura e do espaço linguístico chineses
  • Existe um produto comercial que usa a antiga arquitetura Nanhu do XiangShan. Parece que ainda não foi lançado, mas continua sendo interessante
    https://milkv.io/ja/ruyibook

  • Qual é a estratégia de publicar isso como open source?

    • Eles apresentaram no HotChips 2024: https://www.youtube.com/watch?v=4_R0S6piLA0&t=2114s
      Uma das coisas que disseram lá foi que esperam que o RISC-V em geral, e especialmente seus próprios cores, se tornem uma plataforma de pesquisa acadêmica. Assim, ideias de ponta são compartilhadas publicamente e a indústria se beneficia globalmente
      Numa leitura otimista, é desejar um futuro melhor para todos; numa leitura cínica, open source é muito mais difícil de bloquear com sanções ou controles de exportação. A verdade provavelmente fica em algum lugar no meio
    • Universidades sempre publicam coisas como open source. Eu também publico como open source tudo o que faço na universidade
      De qualquer forma é difícil ganhar dinheiro com isso, e a universidade geralmente permite, então é ótimo para o currículo
      Também há muito open source na Europa e, francamente, não é como se os governos estivessem conspirando para destruir os EUA. Não vejo o Linux como um plano do governo sueco para destruir os Estados Unidos
      Pela minha experiência, a maioria dos chineses também não se importa muito com países fora da China, a menos que trabalhe com comércio exterior. A China é tão grande, mesmo comparada a países como os EUA, que dá a sensação de viver dentro da própria bolha; eles parecem não pensar nesse tipo de questão todos os dias, nem sequer todos os meses
    • Outra motivação pode ser enfraquecer o domínio ocidental em design de chips
      É uma forma de distribuir gratuitamente algo “bom o suficiente” que ataca o fosso defensivo dos concorrentes. Se a diferença não for grande, pode até prejudicar os negócios deles
      O financiamento do OpenStreetMap pela Apple e por grandes empresas de tecnologia como contraponto ao Google Maps pode ser visto de modo parecido. Só reduzir a receita de um concorrente já tem valor estratégico
      A fala de Satya Nadella em uma entrevista, dizendo que, se o ChatGPT apenas aumentar o custo da Busca do Google, isso já seria uma grande vitória para a Microsoft, segue a mesma lógica
    • Na prática, é bem provável que um grupo interno da Academia Chinesa de Ciências queira métricas de impacto maiores em suas avaliações, como acontece em outras instituições de pesquisa financiadas pelo Estado
    • A estratégia parece ser mais algo como promoção da China, marketing para ampliar adoção, quebrar a duopólio dos chips, obter contribuições e transformar a tecnologia em uma commodity para torná-la imune a sanções
  • Fico feliz em ver outro projeto usando Chisel. Pergunto-me para onde a indústria está indo
    Parece que já passou da hora de Verilog e VHDL serem substituídos. Lembro que usei um dos dois na universidade e foi uma experiência realmente desagradável

    • Fico curioso sobre o que mudou para que agora tenha chegado a hora de substituir Verilog e VHDL
      Meu orientador de graduação dirige uma empresa que tenta substituir Verilog e VHDL, e faz isso há bem mais de 10 anos. Não parece ter deixado uma marca grande ainda, mas também não acompanhei a área de perto: https://github.com/clash-lang/clash-compiler
      Também existe uma implementação de RISC-V escrita com isso
      As ferramentas nessa área são caras demais para criar e verificar, e o mercado é pequeno demais; por isso, parece quase impossível surgir, em um prazo razoável, algo que ameace o ecossistema existente