Jaime López

Data Science Systems Developer

Optimización en computación para finanzas

Feb. 05, 2026

Cuando la escala de los datos financieros crece, la eficiencia computacional es crítica. Como premisas, se sabe que la forma de alcanzar mejor rendimiento es por dos vías: mejores algoritmos y mejor uso del hardware disponible. Este articulo se enfoca en la segunda vía, explorando técnicas de optimización vía paralelismo y vectorización.

En general, para volúmenes pequeños de datos, las diferencias en rendimiento entre un código optimizado y uno no optimizado son mínimas. En estos casos, la simplicidad y claridad del código pueden ser más ventajosas que cualquier optimización. Yendo hacia el otro extremo, cuando los volúmenes de datos son muy grandes, las optimizaciones son cruciales para obtener resultados en tiempos razonables.

Sin embargo, hay que tener precaución con las recetas generales. La mayoría de problemas de optimización son dependientes del tipo de datos, los requerimientos de uso y el contexto problema. Por lo tanto, no hay una solución única. En este punto, metodologías de experimentación, por básicas que sean, son esenciales para identificar qué optimizaciones seleccionar.

Para ilustrar con un ejemplo las consideraciones expuestas, acá presento los resultados de un experimento simple. El problema consiste en generar simulaciones de tasas de interés usando el modelo de Vasicek (1977). Este describe los movimientos de las tasas de interés con base en un proceso estocástico de reversión a la media. Usa tres parámetros: la velocidad de reversión, la tasa de interés a largo plazo y la volatilidad. La ecuación diferencial estocástica que describe el modelo es:

$$dr_t = a(b - r_t)dt + \sigma dW_t$$

donde $r_t$ es la tasa de interés en el tiempo $t$, $a$ es la velocidad de reversión, $b$ es la tasa de interés a largo plazo, $\sigma$ es la volatilidad, y $W_t$ es un proceso de Wiener.

El experimento consistió en implementar tres versiones del mismo algoritmo:

  • Serial: una implementación básica sin optimizaciones. Dos lazos anidados van generando una matriz con $M$ simulaciones en $N$ pasos de tiempo cada una.
  • Con OpenMP: paralelización de los lazos externos usando directivas OpenMP para aprovechar múltiples núcleos de CPU.
  • Vectorizada: uso de operaciones vectorizadas para procesar múltiples datos en paralelo, aprovechando las capacidades SIMD de la CPU. Para esto, su usó la libraría de C ndarray.

La simulación se corrió para diferentes tamaños de matrices, midiendo el tiempo de ejecución en milisegundos. El hardware usado fue un procesador Intel Core i5-12400 con 12 núcleso y 64 GB de memoria RAM.

Size            Serial  OpenMP     Vec Vec/Ser OpenMP/Ser
---------------------------------------------------------
  100 x   100     0.26    0.56    0.41 0.64x   0.47x
  250 x   500     3.51    5.89    4.10 0.86x   0.59x
  500 x  1000    12.41   16.22    3.84 3.23x   0.77x
  100 x  2000    48.84   40.14   13.22 3.69x   1.22x
 2500 x  5000   315.08  266.89   80.01 3.94x   1.18x
 5000 x 10000  1237.61 1071.26  332.48 3.72x   1.16x
10000 x 20000  5034.15 4266.39 1459.24 3.45x   1.18x

Los resultados muestran que la versión vectorizada supera a las otras dos cuando el tamaño de los datos crece después de cierto punto. La paralelización con OpenMP mejora el rendimiento respecto a la versión serial, pero no alcanza la eficiencia de la vectorización, posiblemente debido a la naturaleza sequencial del algoritmo. Cuando los datos son pocos, la mejor solución es la versión serial, ya que las sobrecargas de paralelización o vectorización no se justifican.

Con un experimento simple como este, se puede valorar que estrategia es la más adecuada en casos particulares. El experimento puede ser mejorado realizando múltiples corridas para obtener la distribución estadística de los tiempos de ejecución, usando diferentes configuraciones de hardware, explorando otras técnicas de optimización, y probando con otros algoritmos que puedan ser aplicados al mismo problema.

Mi valoración final es que si bien las consideraciones generales de optimización son fundamentales, la experimentación práctica es esencial para identificar las mejores estrategias en cada caso. En mi opinión, lo más importante es tener una compresión clara del problema, de la naturaleza de los datos y de las oportunidades o restricciones del contexto.

Recursos:

Referencias:

  • Vasicek, O. (1977). An equilibrium characterization of the term structure. Journal of Financial Economics, 5(2), 177-188.

English