viernes, 12 de septiembre de 2014

Comparando TinyCC vs Visual C++ 2012 Express vs PicoC vs Otras Máquinas Virtuales

He realizado una prueba de velocidad entre estos diferentes compiladores de C y varias máquinas virtuales con idea de ver en que orden de magnitud se mueve cada uno de los lenguages y plataformas.

El código de prueba son dos for anidados con varias operaciones matemáticas para generar interdependencia en su interior. Es un tanto arbitrario, pero creo que suficiente para comparar la ejecución de código interdependiente.

Respecto a los compiladores (o interpretes) de C, todos ejecutando el mismo código:
  • 1 segundo aproximadamente en promedio TinyCC (tardó 1 segundo en ejecutar la prueba).
  • 1 segundo aprox. Visual C++ (con las opciones por defecto).
  • 0.15 segundos aprox. 6 veces más rápido, Visual C++ con /O2 (optimizar velocidad)
  • 600 segundos aprox. PicoC.

Ahora pasamos a plataformas de máquina virtual, respetando el código al máximo (apenas hizo falta reemplazar las declaraciones de las variables según el lenguaje y los printf por la instrucción adecuada). El resultado:
  • 4 segundos aproximadamente Chrome 35 ejecutando en Javascript estándar.
  • 1.5 segundos aproximadamente Firefox 31.
  • 0.15 segundos aproximadamente Java 1.8 SE 64bits.
  • 1 segundo aproximadamente en C#, Mono 2.0, ejecutandose en Unity 3D.
  • 60 segundos aproximadamente PHP 5.

Sorprende en positivo el rendimiento de Java SE y muy en negativo el rendimiento de PicoC.