Cuando el lenguaje si importa
Cuando el lenguaje si importa Rendimiento de software financiero J. Daniel Garcia Grupo ARCOS Universidad Carlos III de Madrid
11 de mayo de 2016
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
1/27
Cuando el lenguaje si importa
Aviso c Esta obra está bajo una Licencia Creative Commons b e
d
cb e d –
Atribución-NoComercial-SinDerivar 4.0 Internacional. Debes dar crédito en la obra en la forma especificada por el autor o licenciante. El licenciante permite copiar, distribuir y comunicar públicamente la obra. A cambio, esta obra no puede ser utilizada con fines comerciales — a menos que se obtenga el permiso expreso del licenciante. El licenciante permite copiar, distribuir, transmitir y comunicar públicamente solamente copias inalteradas de la obra – no obras derivadas basadas en ella.
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
2/27
Cuando el lenguaje si importa ARCOS@uc3m
1
ARCOS@uc3m
2
Altas prestaciones en finanzas
3
Rendimiento
4
Conclusiones
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
3/27
Cuando el lenguaje si importa ARCOS@uc3m
Grupo ARCOS ARCOS: Grupo de Arquitectura de Computadores, Comunicaciones y Sistemas. Computación y Entrada/Salida de Altas Prestaciones. Big Data. Sistemas ciberfísicos. Modelos de programación para la mejora de aplicaciones.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
4/27
Cuando el lenguaje si importa ARCOS@uc3m
Grupo ARCOS ARCOS: Grupo de Arquitectura de Computadores, Comunicaciones y Sistemas. Computación y Entrada/Salida de Altas Prestaciones. Big Data. Sistemas ciberfísicos. Modelos de programación para la mejora de aplicaciones.
Reengineering and Enabling Performance and poweR of Applications. 2013–2016. cb e d –
REfactoring Parallel Heterogeneous Resource-Aware Applications. 2015–2018.
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
4/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
1
ARCOS@uc3m
2
Altas prestaciones en finanzas
3
Rendimiento
4
Conclusiones
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
5/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
The free lunch is over
Fuente: Herb Sutter. http://www.gotw.ca/publications/concurrency-ddj.htm
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
6/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
¿Qué significa rendimiento? Computación de altas prestaciones: Reducir el tiempo de ejecución de una tarea. Ejemplos: Computación científica, simulaciones, análisis de datos . . .
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
7/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
¿Qué significa rendimiento? Computación de altas prestaciones: Reducir el tiempo de ejecución de una tarea. Ejemplos: Computación científica, simulaciones, análisis de datos . . .
Computación de baja latencia: Minimizar el retraso entre entrada y salida. Ejemplos: Voz sobre IP, juegos online, . . .
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
7/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
Lenguajes en finanzas No hay un único lenguaje de programación. Lenguajes dinámicos frente a estáticos. Con y sin máquina virtual. Procedimientales, orientados a objetos, genéricos, funcionales, . . .
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
8/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
Lenguajes en finanzas No hay un único lenguaje de programación. Lenguajes dinámicos frente a estáticos. Con y sin máquina virtual. Procedimientales, orientados a objetos, genéricos, funcionales, . . .
Lenguajes con alta demanda: Python: 6.8 candidatos/puesto. C++: 8.5 candidatos/puesto. C#: 10.7 candidatos/puesto. Java: 15.3 candidatos/puesto. SQL: 16.7 candidatos/puesto. HTML 5: 23.4 candidatos/puesto. Fuente: http://news.efinancialcareers.com, diciembre 2015
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
8/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
Uso de C++ por sectores
Fuente: www.jetbrains.com, julio 2015
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
9/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
Finanzas cuantitativas Modelos matemáticos de mercados financieros.
Areas de aplicación: Gestión de activos. Gestión de riesgos. Fijación de precios de derivados. ...
Necesidad: Altas prestaciones.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
10/27
Cuando el lenguaje si importa Altas prestaciones en finanzas
Negociación de alta frecuencia High Frequency Trading: Negociación de intercambio de valores financieros. Altamente cuantitativa y algorítmica. Posiciones mantenidas durante breves periodos. Posciones saldadas al final del día.
Necesidad: Baja latencia.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
11/27
Cuando el lenguaje si importa Rendimiento
1
ARCOS@uc3m
2
Altas prestaciones en finanzas
3
Rendimiento
4
Conclusiones
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
12/27
Cuando el lenguaje si importa Rendimiento Gestión de memoria
3
Rendimiento Gestión de memoria Programación genérica Concurrencia y paralelismo
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
13/27
Cuando el lenguaje si importa Rendimiento Gestión de memoria
Gestión de recursos C++ is my favorite garbage collected language because it generates so little garbage. Bjarne Stroustrup
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
14/27
Cuando el lenguaje si importa Rendimiento Gestión de memoria
Memoria dinámica Gestión de memoria dinámica altamente personalizable. Co-existencia de mútliples allocators.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
15/27
Cuando el lenguaje si importa Rendimiento Gestión de memoria
Memoria dinámica Gestión de memoria dinámica altamente personalizable. Co-existencia de mútliples allocators.
Semántica de movimiento. Eliminación eficiente de temporales. Reduce la necesidad de memoria dinámica.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
15/27
Cuando el lenguaje si importa Rendimiento Gestión de memoria
Memoria dinámica Gestión de memoria dinámica altamente personalizable. Co-existencia de mútliples allocators.
Semántica de movimiento. Eliminación eficiente de temporales. Reduce la necesidad de memoria dinámica.
smart pointers: Reducen problemas tradicionales con el uso de punteros.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
15/27
Cuando el lenguaje si importa Rendimiento Programación genérica
3
Rendimiento Gestión de memoria Programación genérica Concurrencia y paralelismo
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
16/27
Cuando el lenguaje si importa Rendimiento Programación genérica
Clases de polimorfismo Hay dos tipos de polimorfismo: estático y dinámico.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
17/27
Cuando el lenguaje si importa Rendimiento Programación genérica
Clases de polimorfismo Hay dos tipos de polimorfismo: estático y dinámico. Polimorfismo dinámico: Selección de implementación en tiempo de ejecución. Sobrecoste en tiempo de ejecución. Mecanismo: Herencia y enlace dinámico de funciones.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
17/27
Cuando el lenguaje si importa Rendimiento Programación genérica
Clases de polimorfismo Hay dos tipos de polimorfismo: estático y dinámico. Polimorfismo dinámico: Selección de implementación en tiempo de ejecución. Sobrecoste en tiempo de ejecución. Mecanismo: Herencia y enlace dinámico de funciones.
Polimorfismo estático: Selección de implementación en tiempo de ejecución. En muchísimos casos ofrece flexibilidad suficiente sin sobrecoste. Mecanismo: Programación genérica.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
17/27
Cuando el lenguaje si importa Rendimiento Programación genérica
Programación genérica Permite expresar tipos y funciones de forma genérica. Abre la puerta a nuevas optimizaciones (std::sort() más rápido que qsort()).
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
18/27
Cuando el lenguaje si importa Rendimiento Programación genérica
Programación genérica Permite expresar tipos y funciones de forma genérica. Abre la puerta a nuevas optimizaciones (std::sort() más rápido que qsort()).
Permite una forma mínima de programación funcional. Simplifica funciones de orden superior (que toman funciones). Uso de expresiones lambda.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
18/27
Cuando el lenguaje si importa Rendimiento Programación genérica
STL Parte de la bilbioteca estándar del lenguaje. Contenedors, iteradores y algoritmos.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
19/27
Cuando el lenguaje si importa Rendimiento Programación genérica
STL Parte de la bilbioteca estándar del lenguaje. Contenedors, iteradores y algoritmos.
Contenedores: Estructuras de datos.
Iteradores: Definen secuencias de valores y permiten recorrerlas.
Algoritmos: Expresados en términos de iteradores.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
19/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
3
Rendimiento Gestión de memoria Programación genérica Concurrencia y paralelismo
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
20/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Concurrencia Modelo de programación multi-hilo portable. Abstracciones clásicas: thread, mutex, condition_variable. Eliminación de ruido sintáctico (ya no necesito casts). Definición de un modelo de memoria abstracto.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
21/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Concurrencia Modelo de programación multi-hilo portable. Abstracciones clásicas: thread, mutex, condition_variable. Eliminación de ruido sintáctico (ya no necesito casts). Definición de un modelo de memoria abstracto.
Mecanismo simplificado de transferencia entre hilos Tanto de valores como de excepciones.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
21/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Concurrencia Modelo de programación multi-hilo portable. Abstracciones clásicas: thread, mutex, condition_variable. Eliminación de ruido sintáctico (ya no necesito casts). Definición de un modelo de memoria abstracto.
Mecanismo simplificado de transferencia entre hilos Tanto de valores como de excepciones.
Modelos de consistencia relajada de memoria.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
21/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Paralelismo Mejor aprovechamiento de los recursos hardware.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
22/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Paralelismo Mejor aprovechamiento de los recursos hardware.
A diversos niveles. Paralelismo de datos dentro de CPU. Uso de GPU como acelerador (ej. Thrust). Paralelismo entre nodos de un clúster.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
22/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Baja latencia Limitación de construcciones que afecta a la latencia. Memoria dinámica: Uso de preasignación, memory pools, ... Impacto de excepciones: alternativas.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
23/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Baja latencia Limitación de construcciones que afecta a la latencia. Memoria dinámica: Uso de preasignación, memory pools, ... Impacto de excepciones: alternativas.
Estructuras de datos libres de cerrojos. Acceso concurrente sin necesidad de sincronización bloqueante. Basadas en modelos de consistencia no secuencial.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
23/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Evolución
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
24/27
Cuando el lenguaje si importa Rendimiento Concurrencia y paralelismo
Evolución
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
24/27
Cuando el lenguaje si importa Conclusiones
1
ARCOS@uc3m
2
Altas prestaciones en finanzas
3
Rendimiento
4
Conclusiones
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
25/27
Cuando el lenguaje si importa Conclusiones
Conclusiones The free lunch is over. Mi lenguaje no puede ignorarlo.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
26/27
Cuando el lenguaje si importa Conclusiones
Conclusiones The free lunch is over. Mi lenguaje no puede ignorarlo.
Rendimiento: Computación de altas prestaciones: Finanzas cuantitativas. Computación de baja latencia: Negociación de alta frecuencia.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
26/27
Cuando el lenguaje si importa Conclusiones
Conclusiones The free lunch is over. Mi lenguaje no puede ignorarlo.
Rendimiento: Computación de altas prestaciones: Finanzas cuantitativas. Computación de baja latencia: Negociación de alta frecuencia.
C++ altamente usado en altas prestaciones y/o baja latencia.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
26/27
Cuando el lenguaje si importa Conclusiones
Conclusiones The free lunch is over. Mi lenguaje no puede ignorarlo.
Rendimiento: Computación de altas prestaciones: Finanzas cuantitativas. Computación de baja latencia: Negociación de alta frecuencia.
C++ altamente usado en altas prestaciones y/o baja latencia. Finanzas y banca los sectores en los que más se usa C++.
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
26/27
Cuando el lenguaje si importa Conclusiones
Conclusiones The free lunch is over. Mi lenguaje no puede ignorarlo.
Rendimiento: Computación de altas prestaciones: Finanzas cuantitativas. Computación de baja latencia: Negociación de alta frecuencia.
C++ altamente usado en altas prestaciones y/o baja latencia. Finanzas y banca los sectores en los que más se usa C++. Mútliples características enfocadas a mejora de prestaciones. cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
26/27
Cuando el lenguaje si importa Conclusiones
Cuando el lenguaje si importa Rendimiento de software financiero J. Daniel Garcia Grupo ARCOS Universidad Carlos III de Madrid
11 de mayo de 2016
cb e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected])
Twitter @jdgarciauc3m
27/27