es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

LuaJIT y GCC: número de núcleos.

ANTECEDENTES:
Leí varios artículos sobre pruebas de rendimiento entre LuaJIT y el lenguaje C.
Había conclusiones diferentes, así que decidí comparar la velocidad de LuaJIT y C para mi propio caso de uso.

La función que probé utiliza un gran conjunto de valores numéricos y varias fórmulas matemáticas.
Es una parte de cálculo intensivo de un módulo de CAD que estoy desarrollando.
Solo bucles y fórmulas.

Descubrí que (en mi prueba) LuaJIT realmente puede superar a GCC (en un 10-15%).
(Utilicé matrices FFI y optimización -o3 para gcc)

Lo cual es un poco triste…
Me gustaba la idea de que para programas realmente rápidos, el viejo lenguaje C seguía siendo el mejor.
Es un poco reconfortante que LuaJIT use matrices de estilo C con FFI 🙂

Pero también es sorprendente…
Durante muchos años, se consideraba “conocimiento común” que los lenguajes de script dinámicos siempre serían (mucho) más lentos que C. Es sorprendente que esta asombrosa velocidad de LuaJIT no esté establecida por el poder de una gran corporación, sino por los esfuerzos de una sola persona.

NÚMERO DE NÚCLEOS:
Durante estas pruebas de referencia, observé la pestaña de rendimiento en el administrador de tareas.
Dos núcleos mostraban una alta actividad durante la prueba, mientras que los otros dos núcleos permanecían con baja actividad.
Esto fue el caso tanto con LuaJIT como con GCC (con y sin optimización)
(Hice las pruebas en una máquina Win7.)

LA PREGUNTA:
¿Realmente se divide el trabajo en dos núcleos?

Con LuaJIT, podría imaginar que un proceso está trabajando en la parte de compilación JIT, y el otro proceso en los cálculos reales.
¿O tal vez la “recolección de basura” se ejecuta en un proceso separado?
(No tengo conocimientos sobre la recolección de basura)

Pero veo el mismo perfil de actividad cuando se ejecuta el programa en C…
Incluso sin la optimización de gcc, hay dos núcleos activos.
(Pero el programa se ejecuta 3 veces más lento.)

¿Podría ser que Windows esté dividiendo el trabajo en dos núcleos??
No busco una explicación técnica detallada.
Tampoco tengo interés en intentar obtener aún más velocidad de LuaJIT o C.
El programa ya es lo suficientemente rápido.

Solo tengo curiosidad si realmente hay dos núcleos “trabajando”.
Preferiría una respuesta en términos sencillos, si es posible.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible que el trabajo se divida en dos núcleos, especialmente si el programa está diseñado para utilizar multi-threading.

    En el caso de LuaJIT y GCC, podría ser posible que los procesos se dividan entre diferentes tareas, como la compilación JIT y los cálculos reales. La recolección de basura en LuaJIT también podría estar ejecutándose en otro núcleo.

    Sin embargo, también es posible que Windows divida el trabajo en dos núcleos automáticamente, especialmente si el programa está limitado por la CPU y puede beneficiarse del multi-threading. Windows tiene un planificador que puede distribuir la carga de trabajo entre los núcleos disponibles para aumentar la eficiencia y la velocidad.

    En cualquier caso, lo importante es que el programa se ejecute de manera rápida y eficiente. Siempre es una buena idea utilizar el multi-threading y optimizar el código para obtener un mejor rendimiento.

Comments are closed.