Benchmark del oscilador de Van der Pol

Mide el rendimiento de la CPU resolviendo la EDO rígida de Van der Pol con el método de Runge-Kutta de 4.º orden durante 1 millón de pasos. RK4 hace 4 evaluaciones de fuerza por paso: 4 veces la aritmética de un solucionador de Euler simple. Cuanto menor el tiempo, mejor.

...
Tu resultado
— ms

Ver la clasificación TOP 500

Sobre este benchmark

El oscilador de Van der Pol, que lleva el nombre de Balthasar van der Pol, quien lo estudió en la década de 1920 al analizar circuitos de tubos de vacío, es un oscilador no lineal canónico con un ciclo límite autosostenido. A diferencia de un oscilador armónico simple, presenta amortiguamiento no lineal: con amplitudes pequeñas el amortiguamiento es negativo (se añade energía) y con amplitudes grandes es positivo (se disipa energía). Esto lleva las trayectorias hacia un estado oscilante estable sean cuales sean las condiciones iniciales.

La ecuación x'' − μ·(1−x²)·x' + x = 0 se vuelve rígida para μ grande: la solución alterna entre fases de deriva lenta y transiciones rápidas en forma de pico que requieren pasos de tiempo pequeños para captarse con precisión. Un solucionador de Euler simple necesitaría un dt absurdamente pequeño para mantenerse estable, y por eso este benchmark usa el método de Runge-Kutta de 4.º orden (RK4). RK4 evalúa el lado derecho cuatro veces por paso con un promedio ponderado, logrando precisión de 4.º orden y tolerando pasos de tiempo mucho mayores.

El benchmark ejecuta 1 000 000 de pasos RK4 con μ = 5, x₀ = 2, v₀ = 0, dt = 0,01. Cada paso realiza cuatro evaluaciones del lado derecho con unas diez operaciones de coma flotante cada una, unos 40 millones de operaciones en total. El bucle cerrado, sin más tráfico de memoria que un puñado de registros, prueba la capacidad de la CPU de mantener el rendimiento en cadenas dependientes de coma flotante. Esto lo hace más exigente que las variantes de un solo paso de Euler, y penaliza a los procesadores con poca profundidad de canalización o mala predicción de saltos con condiciones dependientes de los datos.