Ayush Shukla, ingeniero de Axiom y desarrollador de OpenVM, explica en su blog personal cómo reducir la diferencia entre ejecutar un programa RISC-V dentro de una máquina virtual y hacerlo directamente sobre el hardware del equipo anfitrión. OpenVM es la máquina virtual RISC-V que Axiom utiliza para generar pruebas criptográficas sucintas de ejecución correcta; mientras la fase de prueba escala bien en clústeres de GPUs, la ejecución es secuencial y se ha convertido en el cuello de botella.
El artículo recorre, de forma didáctica y progresiva, las distintas técnicas para eliminar capas de sobrecarga. Parte de un intérprete clásico basado en el ciclo fetch-decode-execute y muestra cómo el coste dominante cambia al añadir precodificación, eliminarse la decodificación repetida. Después presenta el despacho mediante computed goto y el encadenamiento de manejadores con tail calls (incluido el atributo musttail de Clang), que permiten saltar de un manejador al siguiente sin pasar por un bucle central ni devolver el control a cada paso. El siguiente paso es pasar el puntero de instrucción y el estado frecuente como argumentos de función, de modo que el compilador los mantenga en registros del anfitrión gracias a la convención de llamada preserve_none de Clang.
Finalmente, Shukla introduce la recompilación ahead-of-time (AOT): dado que el programa invitado se conoce de antemano, se traduce a instrucciones del anfitrión, conectando bloques básicos con tail calls. El objetivo declarado es acercar la emulación de RISC-V al rendimiento bare-metal sobre arquitecturas como arm64, donde el mismo programa tarda unos 100 ms en nativo frente a 3-4 segundos en el intérprete de partida.
