2 puntos por GN⁺ 2025-01-04 | 1 comentarios | Compartir por WhatsApp
  • XiangShan(香山) es un proyecto de código abierto orientado a un procesador RISC-V de alto rendimiento, y la versión actual Kunminghu(昆明湖) se está desarrollando en la rama master
  • La documentación está publicada en docs.xiangshan.cc, y los documentos de diseño de Kunminghu V2R2 y la guía de usuario se ofrecen por separado
  • Las microarquitecturas estables son Yanqihu(雁栖湖) y Nanhu(南湖), y Yanqihu fue la primera microarquitectura estable, desarrollada desde junio de 2020
  • El flujo de desarrollo está compuesto por código de diseño en Scala, transformación FIRRTL, subsistema de caché, framework de cosimulación difftest e imágenes de simulación preconstruidas
  • Se proporciona la generación de Verilog, la ejecución de un simulador basado en Verilator y la ruta de ejecución de xspdb para realizar la generación del diseño y la simulación de programas dentro del proyecto

Descripción general del proyecto

  • XiangShan(香山) es un proyecto de procesador RISC-V de alto rendimiento y código abierto
  • La explicación en chino se ofrece en un README separado
  • La documentación del proyecto puede consultarse en docs.xiangshan.cc
  • La documentación de diseño de XiangShan para Kunminghu V2R2 se publica por separado en docs.xiangshan.cc/projects/design
  • La guía de usuario de XiangShan está disponible en docs.xiangshan.cc/projects/user-guide y XiangShan-User-Guide/releases
  • La traducción de la documentación usa Weblate y recibe contribuciones para inglés y otros idiomas
  • Toda la documentación de XiangShan sigue la licencia CC-BY-4.0

Artículos publicados y metodología de desarrollo

  • El artículo de MICRO 2022 “Towards Developing High Performance RISC-V Processors Using Agile Methodology” trata sobre XiangShan y la aplicación de metodologías ágiles al desarrollo de procesadores RISC-V de alto rendimiento
  • El artículo cubre las herramientas desarrolladas y utilizadas para acelerar el proceso de desarrollo del chip
    • Diseño
    • Verificación funcional
    • Depuración
    • Validación de rendimiento
  • Ese artículo recibió las tres insignias Available, Functional y Reproduced en la evaluación de artefactos
  • Enlaces de referencia:

Versiones de microarquitectura

  • La primera microarquitectura estable es Yanqihu(雁栖湖) y está en la rama yanqihu
    • Se desarrolla desde junio de 2020
  • La segunda microarquitectura estable es Nanhu(南湖) y está en la rama nanhu
  • La versión actual también se conoce como Kunminghu(昆明湖) y todavía está en desarrollo en la rama master
  • El README incluye un diagrama general de la microarquitectura Kunminghu

Estructura del repositorio

  • Los directorios principales se dividen en código de diseño, scripts de desarrollo, submódulos, caché, cosimulación e imágenes de ejecución
  • src/main/scala: ubicación de los archivos de diseño
    • device: dispositivos virtuales para simulación
    • system: wrapper del SoC
    • top: módulo de nivel superior
    • utils: código utilitario
    • xiangshan: código principal de diseño
    • xiangshan/transforms: transformaciones FIRRTL útiles
  • scripts: scripts para desarrollo ágil
  • yunsuan: submódulo yunsuan de XiangShan
  • XSCache: subsistema de caché de XiangShan
  • difftest: framework de cosimulación difftest
  • ready-to-run: imágenes de simulación preconstruidas

IDE y generación de Verilog

  • La configuración de BSP se realiza con make bsp
  • La configuración de IDEA se realiza con make idea
  • El código Verilog se genera con make verilog
    • Se generan varios archivos .sv en la carpeta build/rtl/
    • Un archivo de ejemplo es build/rtl/XSTop.sv
    • Consulta el Makefile para más información

Ejecución de la simulación

  • Para ejecutar un programa en simulación se requieren variables de entorno y herramientas dependientes
  • Preparación:
    • Configurar NEMU_HOME con la ruta absoluta del proyecto NEMU
    • Configurar NOOP_HOME con la ruta absoluta del proyecto XiangShan
    • Configurar AM_HOME con la ruta absoluta del proyecto AM
    • Instalar mill
    • Después de clonar el proyecto, inicializar los submódulos con make init
  • Simulador basado en Verilator:
    • Requiere instalar Verilator
    • make emu compila el simulador C++ basado en Verilator ./build/emu
    • Los argumentos de ejecución pueden consultarse con ./build/emu --help
    • Consulta Makefile y verilator.mk para más información
  • Ejemplo de ejecución:
    • 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

Ruta de ejecución de xspdb

  • xspdb puede usarse de dos maneras
  • Inicio rápido con un binario precompilado:
    • No requiere compilación y puede ejecutarse con un entorno estándar de Python
    • Ofrece la experiencia completa de XiangShan con bajo uso de memoria
    • La versión más reciente de XSPdb puede descargarse desde el resumen de ejecución del workflow de Actions del repositorio
  • Compilar desde el código fuente:
    • Requiere instalar picker, una herramienta de verificación compatible con lenguajes de alto nivel
    • make pdb compila el binario Python de XiangShan
    • make pdb-run ejecuta el binario de XiangShan
  • Los ejemplos de interacción con xspdb incluyen cargar un binario, configurar un watchpoint del commit PC, ejecutar paso a paso por instrucción, imprimir información del PC y ejecutar hasta el punto de salida del binario

Solución de problemas, comunidad y licencia

1 comentarios

 
GN⁺ 2025-01-04
Opiniones de Hacker News
  • Si quieres probar una simulación, con el Dockerfile que uso puedes crear un entorno basado en Ubuntu 24.04.
    Clona OpenXiangShan/xs-env y hace la instalación de herramientas, la instalación de Verilator, la inicialización de XiangShan, la compilación de DRAMsim3, la compilación del emulador DefaultConfig y hasta la compilación del ejemplo nexus-am/apps/hello.
    Se necesitan 64 GB de RAM; en mi caso funcionó con 16 GB de RAM y 48 GB de swap agregados. Puede haber pasos duplicados, pero la última vez que lo intenté, este método funcionó.

    • Me intriga por qué usa tanta memoria.
  • Este proyecto fue el primero en mucho tiempo que realmente me estimuló la cabeza, porque encaja de forma curiosa con mis intereses recientes.
    Dicho eso, con solo darle una mirada muy rápida, terminé empatizando mucho con los usuarios no angloparlantes. El README es lo bastante amable para usuarios angloparlantes, pero al leerlo sentía que tenía que ir cambiando constantemente los nombres de los tokens en mi cabeza para seguir el hilo, y en ese proceso noté dos cosas.
    Primero, me recordó por qué no puedo terminar de leer literatura rusa clásica: desde el principio aparecen nombres que no pertenecen al conjunto de nombres que me resulta familiar, y termino perdido como si fuera un cache miss.
    Segundo, parece que los usuarios angloparlantes no han necesitado mucho ese músculo cultural. Esto se debe a que, durante bastante tiempo, el mundo ha usado en cierta medida el inglés como una especie de lengua común, y también me vino a la mente el chiste: “¿Cómo se le dice a una persona que solo sabe un idioma? Monolingüe… es broma, estadounidense”.
    Parece posible que “estadounidenses como yo” mantengan un registro público que preprocese los tokens en la documentación y el código fuente. Un registro de definiciones al estilo de DefinitelyTyped sería muy de nicho, pero bastante útil.

    • Hay un texto que dice que, cuando te sientes mal por ser monolingüe, una pregunta más justa que “cuántos idiomas sabes” es “qué porcentaje de los idiomas que se hablan por más de 5 millones de personas dentro de unas 1,000 millas de donde vives conoces”.
      https://structuredprocrastination.com/light/biling.php
  • https://github.com/OpenXiangShan/XiangShan-doc/blob/main/doc...
    La lista de instrucciones fusionadas es algo peculiar. Fuera de las correspondientes a SH{1,2,3,4}ADD, el resto no me lo esperaba.
    La estoy viendo con Google Translate, pero tampoco veo ahí la ejecución condicional de saltos cortos al estilo SiFive.

    • Me pregunto si la propia organización de RISC-V mantiene en algún lado una lista o documentación de las secuencias de fusión de instrucciones recomendadas.
      La wiki técnica que usan es bastante difícil de navegar y buscar, y los repositorios no oficiales en GitHub no son mucho mejores, así que es difícil incluso saber si existe.
  • Hace unas semanas también publiqué un enlace a este proyecto; es realmente interesante ver este tipo de proyectos académicos.
    Para quienes tengan interés, el blog quincenal está enlazado aquí, y algunas entradas también están disponibles en inglés: https://docs.xiangshan.cc/zh-cn/latest/blog/

  • Me gusta que los nombres de las microarquitecturas tengan una temática de lagos, como Yanqihu (lago Yanqi), Nanhu (lago Nan) y Kunminghu (lago Kunming).
    ¿Coffee Lake? ¿Skylake? No: Kunming Lake.
    https://en.m.wikipedia.org/wiki/List_of_Intel_codenames

  • Vale la pena tener presente que China está avanzando mucho en IA, robótica y procesadores, y también es impresionante que una buena parte de eso la publiquen como open source.
    Excelente trabajo, e inspira.

    • ¿RISC-V no es, para empezar, software libre y open source?
    • Es muy probable que el hecho de hacerlo open source sea parte del factor de éxito.
      La cultura china está construida en torno a la reproducción constante y la mejora incremental, algo que se remonta al menos a la época de Confucio. Algunas personas ven eso como copia indiscriminada, pero en realidad se parece más a aprender en profundidad y pararse sobre los hombros de otros.
      Esa actitud de “haz un fork” encaja bastante bien con el open source, aunque por supuesto puede resultar irritante para licencias de propiedad intelectual o patentes.
      Sin embargo, eso no significa que esta apertura se extienda fácilmente fuera de China, especialmente fuera del ámbito cultural y lingüístico chino.
  • Hay un producto comercial que usa la arquitectura Nanhu anterior de XiangShan. No parece haber salido todavía, pero aun así es interesante.
    https://milkv.io/ja/ruyibook

  • ¿Cuál será la estrategia detrás de publicar esto como open source?

    • Lo presentaron en HotChips 2024: https://www.youtube.com/watch?v=4_R0S6piLA0&t=2114s
      Una de las cosas que dijeron allí fue que querían que RISC-V en general, y en particular sus propios cores, se convirtieran en una plataforma de investigación académica. Si eso ocurre, las ideas de vanguardia se comparten públicamente y la industria se beneficia a nivel mundial.
      Visto con optimismo, desean un futuro mejor para todos; visto con cinismo, el open source es mucho más difícil de sancionar o controlar mediante restricciones de exportación. La verdad probablemente esté en algún punto intermedio.
    • Las universidades siempre publican open source por naturaleza. Yo también publico como open source todo lo que hago en la universidad.
      De todos modos es difícil ganar dinero con eso y la universidad normalmente lo permite, así que queda muy bien en el currículum.
      En Europa también hay mucho open source y, francamente, no es que los gobiernos estén conspirando para destruir a Estados Unidos. No veo a Linux como un plan del gobierno sueco para destruir a Estados Unidos.
      Según mi experiencia, la mayoría de los chinos tampoco se preocupan mucho por países fuera de China, salvo que trabajen en comercio internacional. China es tan grande, incluso comparada con países como Estados Unidos, que da la sensación de vivir dentro de su propia burbuja, y no parece que piensen en esos temas todos los días, ni siquiera todos los meses.
    • Otra motivación podría ser debilitar el dominio occidental del diseño de chips.
      Es una forma de regalar algo “suficientemente bueno” que ataque el foso defensivo de los competidores. Si la brecha no es grande, incluso podría dañar el negocio del rival.
      Que Apple y las grandes tecnológicas financien OpenStreetMap para competir con Google Maps puede verse de forma similar. Con solo reducir los ingresos de un competidor ya hay valor estratégico.
      Va en la misma línea de cuando Satya Nadella dijo en una entrevista que, si ChatGPT simplemente aumentaba los costos de la Búsqueda de Google, eso ya sería una gran victoria para Microsoft.
    • Siendo realistas, es muy probable que un grupo interno de la Academia China de Ciencias quiera mejores métricas de impacto en sus evaluaciones, como ocurre con otros institutos de investigación financiados por el Estado.
    • La estrategia parece más bien una mezcla de propaganda china, marketing para aumentar la adopción, romper el duopolio de chips, conseguir contribuciones y convertir la tecnología en un bien genérico para hacerla inmune a sanciones.
  • Me alegra ver otro proyecto que usa Chisel. Me pregunto hacia dónde va la industria.
    Parece que ya va siendo hora de que Verilog y VHDL sean reemplazados. Recuerdo que uno de los dos fue realmente desagradable de usar en la universidad.

    • Me pregunto qué cambió para que ahora sea el momento de reemplazar Verilog y VHDL.
      Mi supervisor de tesis de licenciatura dirige una empresa que intenta reemplazar Verilog y VHDL, y lleva haciéndolo mucho más de 10 años. No parece que haya dejado una gran huella todavía, aunque no he seguido de cerca este campo: https://github.com/clash-lang/clash-compiler
      También hay una implementación de RISC-V escrita con eso.
      Las herramientas de este campo son demasiado caras de crear y verificar, y el mercado es demasiado pequeño, así que parece casi imposible que surja algo capaz de amenazar al ecosistema existente en un plazo razonable.