Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

155
Views
Optimización de IL para compiladores JIT

Estoy desarrollando un compilador que emite código IL. Es importante que el IL resultante sea JIT a los códigos de máquina más rápidos posibles por los compiladores Mono y Microsoft .NET JIT.

Mis preguntas son:

  1. ¿Tiene sentido optimizar patrones como:

     'stloc.0; ldloc.0; ret' => 'ret' 'ldc.i4.0; conv.r8' => 'ldc.r8.0'

    y tal, o son los JIT lo suficientemente inteligentes como para encargarse de esto?

  2. ¿Existe una especificación con la lista de optimizaciones realizadas por los compiladores Microsoft/Mono JIT?

  3. ¿Hay alguna buena lectura con recomendaciones prácticas/mejores prácticas para optimizar IL para que los compiladores JIT puedan, a su vez, generar el código de máquina más óptimo (en cuanto al rendimiento)?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

  1. Los dos patrones que describí son las cosas fáciles que el JIT realmente hace bien (a excepción de las estructuras no primitivas). En forma SSA, la propagación constante y la eliminación de valores muertos es muy fácil.
  2. No, tienes que probar lo que puede hacer el JIT. Mire la literatura del compilador para ver qué optimizaciones estándar esperar. Luego, prueba para ellos. Los dos JIT que tenemos ahora optimizan muy poco y, a veces, no hacen bien las cosas más básicas. Por ejemplo, MyStruct s; sx = 1; sx = 1; no está optimizado por RyuJIT. s = s; tampoco lo es sx + sx carga x dos veces desde la memoria. Espera poco.
  3. Debe comprender a qué se asignan las operaciones básicas del código de máquina. Esto no es demasiado complicado. Pruebe algunas cosas y mire la lista de desmontaje. Rápidamente obtendrá una idea de cómo se verá la salida.
over 4 years ago · Santiago Trujillo Report

0

Las conversiones redundantes y la carga/almacenamiento como ese son un efecto secundario bastante inevitable de un analizador recursivo decente. Técnicamente, puedes deshacerte de ellos con un optimizador de mirilla. Pero no hay de qué preocuparse, los compiladores de C# y VB.NET también los generan.

Los nervios de .NET/Mono existentes son muy buenos para optimizarlos. Se enfocan en optimizar el código que realmente importa para la velocidad de ejecución, el código máquina. Con la gran ventaja de que cualquiera que escriba un compilador que genere IL automáticamente se beneficia de estas optimizaciones sin tener que hacer nada especial.

Las optimizaciones de jitter están cubiertas en esta publicación .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!