3 votos

La mejor manera de hacer multithread de Monte-Carlo en QuantLib

QuantLib, cuenta con excelentes instalaciones para el Monte-Carlo de precios de los motores, las clases McSimulation y MonteCarloModel hacer un montón de trabajo. Pero lo hacen en un único hilo. ¿Cuál es la mejor manera de introducir en paralelo en mi costumbre de motor (heredado de McSimulation clase, como en el caso de algunos instrumentos en QuantLib)? Ahora veo 2 opciones

  1. Uso QuantLib rutinas, como son el presente, y manejar múltiples ofertas de hoteles en paralelo.
  2. Personalizar MonteCarloModel

    2.1 Hacer una subclase de MonteCarloModel y sobrescribir addSamples: insertar allí OpenMP código

    2.2 Mi motor ya es una subclase de McSimulation (I sobrescribir timeGrid, pathGenerator, pathPricer), yo también sobrescribir "calcular" - voy a copiar su código actual, pero se sustituye la creación de instancias de MonteCarloModel con mi aplicación.

No me gusta ni la primera, ni la segunda de las opciones. La primera no me permiten el precio de un solo frente rápidamente, el segundo hace que me de problemas en caso de modificaciones en las clases de MonteCarloModel y McSimulation en QuantLib distributiva.

6voto

Brad Tutterow Puntos 5628

Suspiro. No estoy seguro de que hay una mejor manera de hacer multi-threaded MC en QuantLib.

Me temo que estás subestimando la cantidad de desarrollo que se necesitaría para la opción 2. No vas a salir con algunos de OpenMP código como usted sugiere, ya que los cálculos en diferentes caminos no son trivialmente paralelo:

  • el Rng que tenemos no son paralelas, e incluso si utiliza una instancia diferente para cada subproceso, todavía el riesgo de superposición en el conjunto de números aleatorios que van a dibujar;
  • la ruta de acceso del generador se mantiene el estado, así que usted no puede utilizar la misma en diferentes hilos;
  • las estadísticas de la clase mantiene el estado, así que tienes que utilizar una instancia diferente para cada subproceso y agregar los resultados a posteriori, o agregar un bloqueo a la existente para serializar el acceso.

Y estos son sólo los problemas a los que sólo vienen a la mente en los dos primeros minutos sin mirar demasiado duro. Todos en todos, me gustaría ir a la opción 1 si usted no quiere invertir mucho tiempo de desarrollo.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X