SlideShare a Scribd company logo
1 of 33
Download to read offline
ACENSI, Tour Monge - 22, Place des Vosges - 92 400 Courbevoie - La Défense 5 - www.acensi.fr
Concurrent programming based on
dataflow
TPL DATAFLOW
 A new approach to Monte Carlo
VAR
09/02/2015Version du document
OVERVIEW
Optimization and multithreading
without getting your hands dirty!
09/02/2015 2Version du document
TPL Dataflow Presentation
Why TPL Dataflow ?
A natural extension of framework 4.0
The library
Use cases
Case study : Monte Carlo Value At Risk (VAR)
What is VAR ?
Monte Carlo VAR: Basic Approach
Monte Carlo VAR: Dataflow Approach
Conclusion
SUMMARY
09/02/2015Version du document
Speakers Presentation

Yves Alexandre SIMON James KOUTHON Julien LEBOT Adina SANDOU
R&D Director Technical Director .Net Expert .Net Expert
Information systems and Microsoft technologies Consulting
WHO ARE WE ?
09/02/2015 4Version du document
Presentation
TPL DATAFLOW
09/02/2015 5Version du document
TPL DATAFLOW: A NATURAL EXTENSION OF FRAMEWORK 4.0
 Promotes actor-agent oriented designs
through primitives.
 Allows developers to create blocks to
express computations based on directed
dataflow graphs.
09/02/2015Version du document 6
TPL DATAFLOW: THE LIBRARY
Overview
 TPL Dataflow falls in line with Map/Reduce
 Can handle large volumes of data
 Ideal for long computations
TPL Dataflow: paradigm shift
 Tasks are created and linked together as a graph
 Each node can receive data as input and/or output data
09/02/2015 7Version du document
TPL DATAFLOW: THE LIBRARY
 Source blocks (1): acts like a source of data
ISourceBlock<TOutput>
 Target blocks (2): acts like a receiver of data
ITargetBlock<TInput>
 Propagator blocks: acts like (1) and (2)
IPropagatorBlock<TInput, TOutput>
09/02/2015 8Version du document
TPL DATAFLOW: THE LIBRARY
Basic blocks
 BufferBlock: is a queue, a FIFO (First In First Out) buffer.
 ActionBlock: like a “foreach”, it executes a delegate for each
input item.
ex: var node = new ActionBlock<string>(s => Console.WriteLine(s));
 TransformBlock: acts like a “Linq” select
ex: var node = new TransformBlock<int, int>(p => p * 100);
Advanced blocks
 BroadcastBlock: forwards copies of data items as its output.
 JoinBlock: collects many inputs and output a tuple
 Others
09/02/2015 9Version du document
TPL DATAFLOW: THE LIBRARY
Linking
 Used to link two blocks together.
 Predicates and parallelism options available.
 There’s no limit to what you can link.
Completion Status
 Each block supports an asynchronous form of
completion to propagate finished state.
09/02/2015 10Version du document
WHY TPL DATAFLOW?
TPL Dataflow benefits
 Paradigm shift for higher code expressivity
 Using multithreading without effort
 Boosting performance (optimization) painlessly
 Focusing on the 'what' rather than the 'how'
09/02/2015 11Version du document
TPL DATAFLOW: USE CASES
Build more complex systems easily
Samples:
 Data analysis/mining services
 Web-crawlers
 Image and Sound processors
 Databases engine designs
 Financial computation
 …
09/02/2015 12Version du document
Monte Carlo Value at Risk (VAR)
CASE STUDY
09/02/2015 13Version du document
WHAT IS VAR?
What is VAR?
 Value at risk (VAR)
 Monitor risk in trading portfolio
 Financial Global risk indicator
Our use case
 Market VAR (VAR on market move)
 Intensive computation (especially for Monte Carlo VAR)
09/02/2015 14Version du document
Example
VAR 99/1D : Maximum lost in 1 day with
99% probability
VAR Calculation Methods
Historical
VAR
(historical
data)
Parametric
VAR
(formula data)
Monte
Carlo VAR
(montecarlo
simulation
data)
SIMPLE MONTECARLO VAR WORKFLOW
09/02/2015 15Version du document
Start
Portfolios
Composition
Market Data
Static Data
Global
Position
Position Pricing
With MonteCarlo
Calculus
Position Pricing
With MonteCarlo
Calculus
Position Pricing
With MonteCarlo
Calculus
Statistics on
Global
Distribution (VAR)
End
1 2 3 4
Basic approach
MONTE CARLO VAR
09/02/2015 16Version du document
MONTE CARLO VAR: BASIC APPROACH
Pipeline:

09/02/2015 17Version du document
Start
Portfolios
Composition
Market Data
Global
Position
Position Pricing
With MonteCarlo
Calculus
Statistics on
Global
Distribution (VAR)
End
MONTE CARLO VAR: BASIC APPROACH
Portfolio composition
 Fetch portfolios by using the provider

Market data
 Get product parameters from market data provider
Global position
 Look over all portfolios and nettings and get the positions
09/02/2015 18Version du document
Portfolios = PortfolioProvider.Portfolios;
ProductParameters = ProductParametersProvider.ProductsParameters;
Portfolios
Composition
Market Data
Global
Position
IEnumerable<KeyValuePair<Product, long>> allTransactions =
Portfolios.SelectMany(x => x.Transactions)
.GroupBy(y => y.Product)
.Select(z => new KeyValuePair<Product, long>
(z.Key, z.Sum(x => x.Position)));
Positions = allTransactions.ToDictionary(t => t.Key, t => t.Value);
MONTE CARLO VAR: BASIC APPROACH
Position pricing
 For each product, run the Monte Carlo simulation
Statistics on global
 Multiply the result by the position value and calculate the lost value
09/02/2015 19Version du document
IEnumerable<double> results =
StatisticsUtilities.SimulateMonteCarloWithPosition(
new MonteCarloInput
{
Parameters = parameters,
Position = position,
Product = product
},
TotalSimulations);
Position Pricing
With MonteCarlo
Calculus
IList<double> totals = new List<double>();
Func<IList<double>, string, IList<double>> sumList = (current, key) =>
Helpers.SumList(current, lostsValuesByProduct[key].ToList());
MONTE CARLO VAR: BASIC APPROACH
09/02/2015 20Version du document
totals = lostsValuesByProduct.Keys.Aggregate(totals, sumList);
StatisticsUtilities.CalculateVar(totals, 0.99);
 Aggregate the lost value for all products
 Choose the VAR at 99% for 1 day
Statistics on
Global
Distribution (VAR)
Dataflow approach
MONTE CARLO VAR
09/02/2015 21Version du document
MONTE CARLO VAR: DATAFLOW APPROACH
DataFlow Graph
09/02/2015 22Version du document
Portfolios
Composition
And Market
Data
Global
Position
Position Pricing
With MonteCarlo
Calculus
Position Pricing
With MonteCarlo
Calculus
Position Pricing
With MonteCarlo
Calculus
Aggregator
Statistics on
Global
Distribution (VAR)
DataFlow
MONTE CARLO VAR: DATAFLOW APPROACH
Chosen approach: parallelize per product

09/02/2015 23Version du document
Product
Product
Product
Product
…
N threads
CalculateLoss() x M iterations
CalculateLoss() x M iterations
CalculateLoss() x M iterations
CalculateLoss() x M iterations
MONTE CARLO VAR: DATAFLOW APPROACH
Process overview
09/02/2015 24Version du document
TransformBlock
Price
Mean
Standard Dev
Position
IN: MonteCarloInput OUT: IEnumerable<double>
Losses
Normal
distribution
Calculate Loss
ActionBlock TotalsLosses
IN: IEnumerable<double> OUT: IEnumerable<double>
Aggregator
MONTE CARLO VAR: DATAFLOW APPROACH
TransformBlock runs the Monte Carlo simulation
 Key points:
▬ Do only one thing
▬ Keep work data local
▬ Fully enumerate returned data
09/02/2015 25Version du document
var monteCarlo = new TransformBlock<MonteCarloInput, IEnumerable<double>>(input =>
{
var normalDistribution = new NormalEnumerable();
return normalDistribution.Take(TotalSimulations)
.Select(alea => StatisticsUtilities.CalculateLoss(input, alea))
.ToList(); // Very important
}, ExecutionOptions);
Position Pricing
With MonteCarlo
Calculus
MONTE CARLO VAR: DATAFLOW APPROACH
ActionBlock aggregates the result
 No need to synchronize access to shared data 
09/02/2015 26Version du document
var totals = new List<double>();
var aggregate = new ActionBlock<IEnumerable<double>>(doubles =>
{
if (!totals.Any())
{
totals.AddRange(doubles);
}
else
{
var losses = doubles.ToList();
foreach (var i in Enumerable.Range(0, losses.Count()))
{
totals[i] += losses[i];
}
}
});
Aggregator
MONTE CARLO VAR: DATAFLOW APPROACH
Linking the blocks together
Triggering the data flow chain

 Data posted asynchronously
09/02/2015 27Version du document
foreach (var portfolio in Portfolios
.SelectMany(x => x.Transactions)
.GroupBy(y => y.Product)
.Select(z => new KeyValuePair<Product, long>(z.Key, z.Sum(x => x.Position))))
{
var position = portfolio.Value;
var parameters = ProductParameters.First(x => x.Product.Equals(portfolio.Key));
monteCarlo.Post(new MonteCarloInput
{
Parameters = parameters,
Position = position
});
}
monteCarlo.LinkTo(aggregate, DataflowLinkOptions);
Global
Position
MONTE CARLO VAR: DATAFLOW APPROACH
Completing the tasks
 Tricky to get right
▬ Can cause deadlocks
▬ Solution: Automatically propagate completion
09/02/2015 28Version du document
monteCarlo.Complete();
aggregate.Completion.Wait();
DataflowLinkOptions = new DataflowLinkOptions
{
PropagateCompletion = true
}
MONTE CARLO VAR: DATAFLOW APPROACH
Manual completion propagation
Maximizing CPU usage

09/02/2015 29Version du document
monteCarlo.Completion.ContinueWith(t =>
{
if (t.IsFaulted)
{
((IDataflowBlock)aggregate).Fault(t.Exception); // Pass exception
}
else
{
aggregate.Complete(); // Mark next completed
}
});
ExecutionOptions = new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = Environment.ProcessorCount
}
MONTE CARLO VAR: DATAFLOW APPROACH
Result
09/02/2015 30Version du document
0
500
1000
1500
2000
2500
3000
3500
4000
i5-4200U 4 @
2.30GHz
Intel Celeron
G1820 2 @
2.70GHz
Intel i5-2400 4 @
3.00GHz
i7-3770K w/ 8 @
5.09GHz
i7-4790K w/ 8 @
4.00GHz
milliseconds
CPU
Benchmark (lower is better)
Basic Data flow
What did we learn?
CONCLUSION
09/02/2015 31Version du document
CONCLUSION
Performance increase
 Faster
 Automatically scale to hardware
Paradigm shift
 Macro-level optimization
 New primitives
09/02/2015 32Version du document
 github.com/acensi/techdays-2015
 msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx
 github.com/akkadotnet/akka.net
Find out
more !
 Experiment with the code
 Parallelize data loading
 Try new blocks
 Come see us at the booth 
Going further
www.acensi.fr
Let’s keep the conversation going!
Come see us at booth 26
09/02/201533Version du document

More Related Content

Similar to La programmation concurrente par flux de données

Kettleetltool 090522005630-phpapp01
Kettleetltool 090522005630-phpapp01Kettleetltool 090522005630-phpapp01
Kettleetltool 090522005630-phpapp01jade_22
 
Solving the weak spots of serverless with directed acyclic graph model
Solving the weak spots of serverless with directed acyclic graph modelSolving the weak spots of serverless with directed acyclic graph model
Solving the weak spots of serverless with directed acyclic graph modelVeselin Pizurica
 
Cooperative Task Execution for Apache Spark
Cooperative Task Execution for Apache SparkCooperative Task Execution for Apache Spark
Cooperative Task Execution for Apache SparkDatabricks
 
Apache Flink Adoption at Shopify
Apache Flink Adoption at ShopifyApache Flink Adoption at Shopify
Apache Flink Adoption at ShopifyYaroslav Tkachenko
 
Portfolio For Charles Tontz
Portfolio For Charles TontzPortfolio For Charles Tontz
Portfolio For Charles Tontzctontz
 
Ronalao termpresent
Ronalao termpresentRonalao termpresent
Ronalao termpresentElma Belitz
 
Guide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in KotlinGuide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in KotlinRapidValue
 
Faster transactions & analytics with the new SQL2016 In-memory technologies
Faster transactions & analytics with the new SQL2016 In-memory technologiesFaster transactions & analytics with the new SQL2016 In-memory technologies
Faster transactions & analytics with the new SQL2016 In-memory technologiesHenk van der Valk
 
Composing an App with Free Monads (using Cats)
Composing an App with Free Monads (using Cats)Composing an App with Free Monads (using Cats)
Composing an App with Free Monads (using Cats)Hermann Hueck
 
Digital twin for ports and terminals schuett slideshare
Digital twin for ports and terminals schuett slideshareDigital twin for ports and terminals schuett slideshare
Digital twin for ports and terminals schuett slideshareHolger Schuett
 
Skills Portfolio
Skills PortfolioSkills Portfolio
Skills Portfoliorolee23
 
MongoDB Days UK: Using MongoDB and Python for Data Analysis Pipelines
MongoDB Days UK: Using MongoDB and Python for Data Analysis PipelinesMongoDB Days UK: Using MongoDB and Python for Data Analysis Pipelines
MongoDB Days UK: Using MongoDB and Python for Data Analysis PipelinesMongoDB
 
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Discover How Volvo Cars Uses a Time Series Database to Become Data-DrivenDiscover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Discover How Volvo Cars Uses a Time Series Database to Become Data-DrivenDevOps.com
 
Functest in Depth
Functest in DepthFunctest in Depth
Functest in DepthOPNFV
 
OpenDaylight app development tutorial
OpenDaylight app development tutorialOpenDaylight app development tutorial
OpenDaylight app development tutorialSDN Hub
 
VIATRA 3: A Reactive Model Transformation Platform
VIATRA 3: A Reactive Model Transformation PlatformVIATRA 3: A Reactive Model Transformation Platform
VIATRA 3: A Reactive Model Transformation PlatformÁbel Hegedüs
 

Similar to La programmation concurrente par flux de données (20)

Kettleetltool 090522005630-phpapp01
Kettleetltool 090522005630-phpapp01Kettleetltool 090522005630-phpapp01
Kettleetltool 090522005630-phpapp01
 
Solving the weak spots of serverless with directed acyclic graph model
Solving the weak spots of serverless with directed acyclic graph modelSolving the weak spots of serverless with directed acyclic graph model
Solving the weak spots of serverless with directed acyclic graph model
 
Cooperative Task Execution for Apache Spark
Cooperative Task Execution for Apache SparkCooperative Task Execution for Apache Spark
Cooperative Task Execution for Apache Spark
 
Apache Flink Adoption at Shopify
Apache Flink Adoption at ShopifyApache Flink Adoption at Shopify
Apache Flink Adoption at Shopify
 
Portfolio For Charles Tontz
Portfolio For Charles TontzPortfolio For Charles Tontz
Portfolio For Charles Tontz
 
Ronalao termpresent
Ronalao termpresentRonalao termpresent
Ronalao termpresent
 
Guide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in KotlinGuide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in Kotlin
 
Wipro
WiproWipro
Wipro
 
Wipro
WiproWipro
Wipro
 
Google cloud Dataflow & Apache Flink
Google cloud Dataflow & Apache FlinkGoogle cloud Dataflow & Apache Flink
Google cloud Dataflow & Apache Flink
 
Faster transactions & analytics with the new SQL2016 In-memory technologies
Faster transactions & analytics with the new SQL2016 In-memory technologiesFaster transactions & analytics with the new SQL2016 In-memory technologies
Faster transactions & analytics with the new SQL2016 In-memory technologies
 
Composing an App with Free Monads (using Cats)
Composing an App with Free Monads (using Cats)Composing an App with Free Monads (using Cats)
Composing an App with Free Monads (using Cats)
 
Digital twin for ports and terminals schuett slideshare
Digital twin for ports and terminals schuett slideshareDigital twin for ports and terminals schuett slideshare
Digital twin for ports and terminals schuett slideshare
 
Skills Portfolio
Skills PortfolioSkills Portfolio
Skills Portfolio
 
MongoDB Days UK: Using MongoDB and Python for Data Analysis Pipelines
MongoDB Days UK: Using MongoDB and Python for Data Analysis PipelinesMongoDB Days UK: Using MongoDB and Python for Data Analysis Pipelines
MongoDB Days UK: Using MongoDB and Python for Data Analysis Pipelines
 
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Discover How Volvo Cars Uses a Time Series Database to Become Data-DrivenDiscover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
 
Functest in Depth
Functest in DepthFunctest in Depth
Functest in Depth
 
OpenDaylight app development tutorial
OpenDaylight app development tutorialOpenDaylight app development tutorial
OpenDaylight app development tutorial
 
VIATRA 3: A Reactive Model Transformation Platform
VIATRA 3: A Reactive Model Transformation PlatformVIATRA 3: A Reactive Model Transformation Platform
VIATRA 3: A Reactive Model Transformation Platform
 
bmcv
bmcvbmcv
bmcv
 

More from Microsoft

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuMicrosoft
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaSMicrosoft
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileMicrosoft
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Microsoft
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Microsoft
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Microsoft
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à ZMicrosoft
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Microsoft
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsMicrosoft
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Microsoft
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryMicrosoft
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Microsoft
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Microsoft
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Microsoft
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET CoreMicrosoft
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Microsoft
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Microsoft
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursMicrosoft
 

More from Microsoft (20)

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieu
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaS
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à Z
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs Analytics
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site Recovery
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
 

Recently uploaded

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 

La programmation concurrente par flux de données

  • 1. ACENSI, Tour Monge - 22, Place des Vosges - 92 400 Courbevoie - La Défense 5 - www.acensi.fr Concurrent programming based on dataflow TPL DATAFLOW  A new approach to Monte Carlo VAR 09/02/2015Version du document
  • 2. OVERVIEW Optimization and multithreading without getting your hands dirty! 09/02/2015 2Version du document
  • 3. TPL Dataflow Presentation Why TPL Dataflow ? A natural extension of framework 4.0 The library Use cases Case study : Monte Carlo Value At Risk (VAR) What is VAR ? Monte Carlo VAR: Basic Approach Monte Carlo VAR: Dataflow Approach Conclusion SUMMARY 09/02/2015Version du document
  • 4. Speakers Presentation  Yves Alexandre SIMON James KOUTHON Julien LEBOT Adina SANDOU R&D Director Technical Director .Net Expert .Net Expert Information systems and Microsoft technologies Consulting WHO ARE WE ? 09/02/2015 4Version du document
  • 6. TPL DATAFLOW: A NATURAL EXTENSION OF FRAMEWORK 4.0  Promotes actor-agent oriented designs through primitives.  Allows developers to create blocks to express computations based on directed dataflow graphs. 09/02/2015Version du document 6
  • 7. TPL DATAFLOW: THE LIBRARY Overview  TPL Dataflow falls in line with Map/Reduce  Can handle large volumes of data  Ideal for long computations TPL Dataflow: paradigm shift  Tasks are created and linked together as a graph  Each node can receive data as input and/or output data 09/02/2015 7Version du document
  • 8. TPL DATAFLOW: THE LIBRARY  Source blocks (1): acts like a source of data ISourceBlock<TOutput>  Target blocks (2): acts like a receiver of data ITargetBlock<TInput>  Propagator blocks: acts like (1) and (2) IPropagatorBlock<TInput, TOutput> 09/02/2015 8Version du document
  • 9. TPL DATAFLOW: THE LIBRARY Basic blocks  BufferBlock: is a queue, a FIFO (First In First Out) buffer.  ActionBlock: like a “foreach”, it executes a delegate for each input item. ex: var node = new ActionBlock<string>(s => Console.WriteLine(s));  TransformBlock: acts like a “Linq” select ex: var node = new TransformBlock<int, int>(p => p * 100); Advanced blocks  BroadcastBlock: forwards copies of data items as its output.  JoinBlock: collects many inputs and output a tuple  Others 09/02/2015 9Version du document
  • 10. TPL DATAFLOW: THE LIBRARY Linking  Used to link two blocks together.  Predicates and parallelism options available.  There’s no limit to what you can link. Completion Status  Each block supports an asynchronous form of completion to propagate finished state. 09/02/2015 10Version du document
  • 11. WHY TPL DATAFLOW? TPL Dataflow benefits  Paradigm shift for higher code expressivity  Using multithreading without effort  Boosting performance (optimization) painlessly  Focusing on the 'what' rather than the 'how' 09/02/2015 11Version du document
  • 12. TPL DATAFLOW: USE CASES Build more complex systems easily Samples:  Data analysis/mining services  Web-crawlers  Image and Sound processors  Databases engine designs  Financial computation  … 09/02/2015 12Version du document
  • 13. Monte Carlo Value at Risk (VAR) CASE STUDY 09/02/2015 13Version du document
  • 14. WHAT IS VAR? What is VAR?  Value at risk (VAR)  Monitor risk in trading portfolio  Financial Global risk indicator Our use case  Market VAR (VAR on market move)  Intensive computation (especially for Monte Carlo VAR) 09/02/2015 14Version du document Example VAR 99/1D : Maximum lost in 1 day with 99% probability VAR Calculation Methods Historical VAR (historical data) Parametric VAR (formula data) Monte Carlo VAR (montecarlo simulation data)
  • 15. SIMPLE MONTECARLO VAR WORKFLOW 09/02/2015 15Version du document Start Portfolios Composition Market Data Static Data Global Position Position Pricing With MonteCarlo Calculus Position Pricing With MonteCarlo Calculus Position Pricing With MonteCarlo Calculus Statistics on Global Distribution (VAR) End 1 2 3 4
  • 16. Basic approach MONTE CARLO VAR 09/02/2015 16Version du document
  • 17. MONTE CARLO VAR: BASIC APPROACH Pipeline:  09/02/2015 17Version du document Start Portfolios Composition Market Data Global Position Position Pricing With MonteCarlo Calculus Statistics on Global Distribution (VAR) End
  • 18. MONTE CARLO VAR: BASIC APPROACH Portfolio composition  Fetch portfolios by using the provider  Market data  Get product parameters from market data provider Global position  Look over all portfolios and nettings and get the positions 09/02/2015 18Version du document Portfolios = PortfolioProvider.Portfolios; ProductParameters = ProductParametersProvider.ProductsParameters; Portfolios Composition Market Data Global Position IEnumerable<KeyValuePair<Product, long>> allTransactions = Portfolios.SelectMany(x => x.Transactions) .GroupBy(y => y.Product) .Select(z => new KeyValuePair<Product, long> (z.Key, z.Sum(x => x.Position))); Positions = allTransactions.ToDictionary(t => t.Key, t => t.Value);
  • 19. MONTE CARLO VAR: BASIC APPROACH Position pricing  For each product, run the Monte Carlo simulation Statistics on global  Multiply the result by the position value and calculate the lost value 09/02/2015 19Version du document IEnumerable<double> results = StatisticsUtilities.SimulateMonteCarloWithPosition( new MonteCarloInput { Parameters = parameters, Position = position, Product = product }, TotalSimulations); Position Pricing With MonteCarlo Calculus IList<double> totals = new List<double>(); Func<IList<double>, string, IList<double>> sumList = (current, key) => Helpers.SumList(current, lostsValuesByProduct[key].ToList());
  • 20. MONTE CARLO VAR: BASIC APPROACH 09/02/2015 20Version du document totals = lostsValuesByProduct.Keys.Aggregate(totals, sumList); StatisticsUtilities.CalculateVar(totals, 0.99);  Aggregate the lost value for all products  Choose the VAR at 99% for 1 day Statistics on Global Distribution (VAR)
  • 21. Dataflow approach MONTE CARLO VAR 09/02/2015 21Version du document
  • 22. MONTE CARLO VAR: DATAFLOW APPROACH DataFlow Graph 09/02/2015 22Version du document Portfolios Composition And Market Data Global Position Position Pricing With MonteCarlo Calculus Position Pricing With MonteCarlo Calculus Position Pricing With MonteCarlo Calculus Aggregator Statistics on Global Distribution (VAR) DataFlow
  • 23. MONTE CARLO VAR: DATAFLOW APPROACH Chosen approach: parallelize per product  09/02/2015 23Version du document Product Product Product Product … N threads CalculateLoss() x M iterations CalculateLoss() x M iterations CalculateLoss() x M iterations CalculateLoss() x M iterations
  • 24. MONTE CARLO VAR: DATAFLOW APPROACH Process overview 09/02/2015 24Version du document TransformBlock Price Mean Standard Dev Position IN: MonteCarloInput OUT: IEnumerable<double> Losses Normal distribution Calculate Loss ActionBlock TotalsLosses IN: IEnumerable<double> OUT: IEnumerable<double> Aggregator
  • 25. MONTE CARLO VAR: DATAFLOW APPROACH TransformBlock runs the Monte Carlo simulation  Key points: ▬ Do only one thing ▬ Keep work data local ▬ Fully enumerate returned data 09/02/2015 25Version du document var monteCarlo = new TransformBlock<MonteCarloInput, IEnumerable<double>>(input => { var normalDistribution = new NormalEnumerable(); return normalDistribution.Take(TotalSimulations) .Select(alea => StatisticsUtilities.CalculateLoss(input, alea)) .ToList(); // Very important }, ExecutionOptions); Position Pricing With MonteCarlo Calculus
  • 26. MONTE CARLO VAR: DATAFLOW APPROACH ActionBlock aggregates the result  No need to synchronize access to shared data  09/02/2015 26Version du document var totals = new List<double>(); var aggregate = new ActionBlock<IEnumerable<double>>(doubles => { if (!totals.Any()) { totals.AddRange(doubles); } else { var losses = doubles.ToList(); foreach (var i in Enumerable.Range(0, losses.Count())) { totals[i] += losses[i]; } } }); Aggregator
  • 27. MONTE CARLO VAR: DATAFLOW APPROACH Linking the blocks together Triggering the data flow chain   Data posted asynchronously 09/02/2015 27Version du document foreach (var portfolio in Portfolios .SelectMany(x => x.Transactions) .GroupBy(y => y.Product) .Select(z => new KeyValuePair<Product, long>(z.Key, z.Sum(x => x.Position)))) { var position = portfolio.Value; var parameters = ProductParameters.First(x => x.Product.Equals(portfolio.Key)); monteCarlo.Post(new MonteCarloInput { Parameters = parameters, Position = position }); } monteCarlo.LinkTo(aggregate, DataflowLinkOptions); Global Position
  • 28. MONTE CARLO VAR: DATAFLOW APPROACH Completing the tasks  Tricky to get right ▬ Can cause deadlocks ▬ Solution: Automatically propagate completion 09/02/2015 28Version du document monteCarlo.Complete(); aggregate.Completion.Wait(); DataflowLinkOptions = new DataflowLinkOptions { PropagateCompletion = true }
  • 29. MONTE CARLO VAR: DATAFLOW APPROACH Manual completion propagation Maximizing CPU usage  09/02/2015 29Version du document monteCarlo.Completion.ContinueWith(t => { if (t.IsFaulted) { ((IDataflowBlock)aggregate).Fault(t.Exception); // Pass exception } else { aggregate.Complete(); // Mark next completed } }); ExecutionOptions = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }
  • 30. MONTE CARLO VAR: DATAFLOW APPROACH Result 09/02/2015 30Version du document 0 500 1000 1500 2000 2500 3000 3500 4000 i5-4200U 4 @ 2.30GHz Intel Celeron G1820 2 @ 2.70GHz Intel i5-2400 4 @ 3.00GHz i7-3770K w/ 8 @ 5.09GHz i7-4790K w/ 8 @ 4.00GHz milliseconds CPU Benchmark (lower is better) Basic Data flow
  • 31. What did we learn? CONCLUSION 09/02/2015 31Version du document
  • 32. CONCLUSION Performance increase  Faster  Automatically scale to hardware Paradigm shift  Macro-level optimization  New primitives 09/02/2015 32Version du document  github.com/acensi/techdays-2015  msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx  github.com/akkadotnet/akka.net Find out more !  Experiment with the code  Parallelize data loading  Try new blocks  Come see us at the booth  Going further
  • 33. www.acensi.fr Let’s keep the conversation going! Come see us at booth 26 09/02/201533Version du document