SlideShare una empresa de Scribd logo
1 de 23
MPI.NET Supercomputing in .NET using the Message Passing Interface David Ross Email: willmation@gmail.com Blog: www.pebblesteps.com
Computationally complex problems in enterprise software ETL load into Data Warehouse takes too long.  Use compute clusters to quickly provide a summary report Analyse massive database tables by processing chunks in parallel on the computer cluster Increasing the speed of Monte Carlo analysis problems Filtering/Analysis of massive log files Click through analysis from IIS logs Firewall logs
Three Pillars of Concurrency Herb Sutter/David Callahan break parallel computing techniques into: Responsiveness and Isolation Via Asynchronous Agents  Active Objects, GUIs, Web Services, MPI Throughput and Scalability Via Concurrent Collections Parallel LINQ, Work Stealing, Open MP Consistency Via Safely Shared Resources Mutable shared Objects, Transactional Memory Source - Dr. Dobb’s Journal  http://www.ddj.com/hpc-high-performance-computing/200001985
The Logical Supercomputer  Supercomputer: ,[object Object]
Batch orientated:  Big Problem goes in, Sometime later result is found...Single System Image: ,[object Object]
Deployment of a program onto 1000 machines MUST be automated,[object Object]
MPI Implementation Standard defines: ,[object Object],MPI Implementation is responsible for: ,[object Object]
Data transport/Buffering,[object Object]
MPI.NETMPI.Net is a wrapper around MS-MPI MPI is complex as C runtime can not infer:  Array lengths the size of complex types MPI.NET is far simpler Size of collections etc inferred from the type system automatically IDispose used to setup/teardown MPI session MPI.NET uses “unsafe” handcrafted IL for very fast marshalling of .Net objects to unmanaged MPI API
Single Program Multiple Node Same application is deployed to each node Node Id is used to drive application/orchestration logic Fork-Join/Map Reduce are the core paradigms
Hello World in MPI public class FrameworkSetup	{ static void Main(string[] args)  { using (new MPI.Environment(ref args)){ string s = String.Format( "My processor is {0}.  My rank is {1}", MPI.Environment.ProcessorName, Communicator.world.Rank);  Console.WriteLine(s);     }   } }
Executing MPI.NET is designed to be hosted in Windows HPC Server MPI.NET has recently been ported to Mono/Linux  - still under development and not recommended Windows HPC Pack SDK mpiexec -n 4 SkillsMatter.MIP.Net.FrameworkSetup.exe My processor is LPDellDevSL.digiterre.com.  My rank is 0 My processor is LPDellDevSL.digiterre.com.  My rank is 3 My processor is LPDellDevSL.digiterre.com.  My rank is 2 My processor is LPDellDevSL.digiterre.com.  My rank is 1
Send/Receive Logical Topology static void Main(string[] args) { 	using (new MPI.Environment(ref args)) {        if(Communicator.world.Size != 2) throw new Exception("This application must be run with MPI Size == 0" ); for(int i = 0; i < NumberOfPings; i++)  { 	     if (Communicator.world.Rank == 0)  {	 string send = "Hello Msg:" + i; Console.WriteLine( "Rank " + Communicator.world.Rank + " is sending: " + send); // Blocking send Communicator.world.Send<string>(send, 1, 0); 	  }  Rank drives parallelism data, destination, message tag
Send/Receive else { // Blocking receive string s = Communicator.world.Receive<string>(0, 0); Console.WriteLine("Rank "+ Communicator.world.Rank + " recieved: " + s);  } Result: Rank 0 is sending: Hello Msg:0 Rank 0 is sending: Hello Msg:1 Rank 0 is sending: Hello Msg:2 Rank 0 is sending: Hello Msg:3 Rank 0 is sending: Hello Msg:4 Rank 1 received: Hello Msg:0 Rank 1 received: Hello Msg:1 Rank 1 received: Hello Msg:2 Rank 1 received: Hello Msg:3 Rank 1 received: Hello Msg:4 source, message tag
Send/Receive/Barrier Send/Receive Blocking point to point messaging Immediate Send/Immediate Receive Asynchronous point to point messaging Request object has flags to indicate if operation is complete Barrier Global block All programs halt until statement is executed on all nodes
Broadcast/Scatter/Gather/Reduce Broadcast Send data from one Node to All other nodes For a many node system as soon as a node receives the shared data it passes it on Scatter Split an array into Communicator.world.Sizechunks and send a chunk to each node Typically used for sharing rows in a Matrix
Broadcast/Scatter/Gather/Reduce Gather Each node sends a chunk of data to the root node Inverse of the Scatter operation Reduce Calculate a result on each node Combine the results into a single value through a reduction (Min, Max, Add, or custom delegate etc...)
Data orientated problem static void Main(string[] args) {   using (new MPI.Environment(ref args)) {    // Load Grades intnumberOfGrades = 0;  	double[] allGrades = null; 	if (Communicator.world.Rank == RANK_0)  { allGrades = LoadStudentGrades(); numberOfGrades = allGrades.Length; 	} Communicator.world.Broadcast(ref numberOfGrades, 0); Load Share(populates)
 // Root splits up array and sends to compute nodes double[] grades = null; intpageSize = numberOfGrades/Communicator.world.Size; if (Communicator.world.Rank == RANK_0) { Communicator.world.ScatterFromFlattened 	  (allGrades,pageSize, 0, ref grades);   }  else  { Communicator.world.ScatterFromFlattened 	  (null, pageSize, 0, ref grades);   } Array is broken into pageSize chunks and sent Each chunk is deserialised into grades
// Calculate the sum on each node double sumOfMarks = Communicator.world.Reduce<double>(grades.Sum(), Operation<double>.Add, 0); // Calculate and publish average Mark double averageMark = 0.0; if (Communicator.world.Rank == RANK_0) { averageMark = sumOfMarks / numberOfGrades; } Communicator.world.Broadcast(ref averageMark, 0); ... Summarise Share
Result Rank: 3, Sum of Marks:0, Average:50.7409948765608, stddev:0 Rank: 2, Sum of Marks:0, Average:50.7409948765608, stddev:0 Rank: 0, Sum of Marks:202963.979506243, Average:50.7409948765608, stddev:28.9402 362588477 Rank: 1, Sum of Marks:0, Average:50.7409948765608, stddev:0
Fork-Join Parallelism Load the problem parameters Share the problem with the compute nodes Wait and gather the results Repeat Best Practice: Each Fork-Join block should be treated a separate Unit of Work Preferably as a individual module otherwise spaghetti code can ensue
When to use PLINQ or Parallel Task Library (1st choice) Map-Reduce operation to utilise all the cores on a box Web Services / WCF (2nd choice) No data sharing between nodes Load balancer in front of a Web Farm is far easier development MPI Lots of sharing of intermediate results Huge data sets Project appetite to invest in a cluster or to deploy to a cloud MPI + PLINQ Hybrid (3rd choice) MPI moves data PLINQ utilises cores

Más contenido relacionado

La actualidad más candente

Continuous Application with Structured Streaming 2.0
Continuous Application with Structured Streaming 2.0Continuous Application with Structured Streaming 2.0
Continuous Application with Structured Streaming 2.0Anyscale
 
Structured Streaming Using Spark 2.1
Structured Streaming Using Spark 2.1Structured Streaming Using Spark 2.1
Structured Streaming Using Spark 2.1Sigmoid
 
A Deep Dive into Structured Streaming: Apache Spark Meetup at Bloomberg 2016
A Deep Dive into Structured Streaming:  Apache Spark Meetup at Bloomberg 2016 A Deep Dive into Structured Streaming:  Apache Spark Meetup at Bloomberg 2016
A Deep Dive into Structured Streaming: Apache Spark Meetup at Bloomberg 2016 Databricks
 
Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015
Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015
Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015Till Rohrmann
 
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...Flink Forward
 
Computational Framework for Generating Visual Summaries of Topical Clusters i...
Computational Framework for Generating Visual Summaries of Topical Clusters i...Computational Framework for Generating Visual Summaries of Topical Clusters i...
Computational Framework for Generating Visual Summaries of Topical Clusters i...Sebastian Alfers
 
Spark streaming
Spark streamingSpark streaming
Spark streamingWhiteklay
 
Parallel Computing - Lec 5
Parallel Computing - Lec 5Parallel Computing - Lec 5
Parallel Computing - Lec 5Shah Zaib
 

La actualidad más candente (10)

Continuous Application with Structured Streaming 2.0
Continuous Application with Structured Streaming 2.0Continuous Application with Structured Streaming 2.0
Continuous Application with Structured Streaming 2.0
 
Structured Streaming Using Spark 2.1
Structured Streaming Using Spark 2.1Structured Streaming Using Spark 2.1
Structured Streaming Using Spark 2.1
 
A Deep Dive into Structured Streaming: Apache Spark Meetup at Bloomberg 2016
A Deep Dive into Structured Streaming:  Apache Spark Meetup at Bloomberg 2016 A Deep Dive into Structured Streaming:  Apache Spark Meetup at Bloomberg 2016
A Deep Dive into Structured Streaming: Apache Spark Meetup at Bloomberg 2016
 
Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015
Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015
Computing recommendations at extreme scale with Apache Flink @Buzzwords 2015
 
Coit11238 2019-t2
Coit11238 2019-t2Coit11238 2019-t2
Coit11238 2019-t2
 
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...
 
Web technology Unit I Part C
Web technology Unit I  Part CWeb technology Unit I  Part C
Web technology Unit I Part C
 
Computational Framework for Generating Visual Summaries of Topical Clusters i...
Computational Framework for Generating Visual Summaries of Topical Clusters i...Computational Framework for Generating Visual Summaries of Topical Clusters i...
Computational Framework for Generating Visual Summaries of Topical Clusters i...
 
Spark streaming
Spark streamingSpark streaming
Spark streaming
 
Parallel Computing - Lec 5
Parallel Computing - Lec 5Parallel Computing - Lec 5
Parallel Computing - Lec 5
 

Destacado

Proyecto TIC en un centro educativo
Proyecto TIC en un centro educativoProyecto TIC en un centro educativo
Proyecto TIC en un centro educativoKela73
 
Proyecto Tic en un centro educativo
Proyecto Tic en un centro educativoProyecto Tic en un centro educativo
Proyecto Tic en un centro educativoGabrielBroll
 
Rpvian anro 0020-pagina0479 (1)
Rpvian anro 0020-pagina0479 (1)Rpvian anro 0020-pagina0479 (1)
Rpvian anro 0020-pagina0479 (1)pelloUPNA
 
Proyecto TIC en un centro educativo
Proyecto TIC en un centro educativoProyecto TIC en un centro educativo
Proyecto TIC en un centro educativomaria maroño
 
Marcha sanlorenzo1
Marcha sanlorenzo1Marcha sanlorenzo1
Marcha sanlorenzo1tatunga
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1ningkanitta
 

Destacado (7)

Proyecto TIC en un centro educativo
Proyecto TIC en un centro educativoProyecto TIC en un centro educativo
Proyecto TIC en un centro educativo
 
Proyecto Tic en un centro educativo
Proyecto Tic en un centro educativoProyecto Tic en un centro educativo
Proyecto Tic en un centro educativo
 
Tic project
Tic projectTic project
Tic project
 
Rpvian anro 0020-pagina0479 (1)
Rpvian anro 0020-pagina0479 (1)Rpvian anro 0020-pagina0479 (1)
Rpvian anro 0020-pagina0479 (1)
 
Proyecto TIC en un centro educativo
Proyecto TIC en un centro educativoProyecto TIC en un centro educativo
Proyecto TIC en un centro educativo
 
Marcha sanlorenzo1
Marcha sanlorenzo1Marcha sanlorenzo1
Marcha sanlorenzo1
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1
 

Similar a Mpi.Net Talk

Overview Of Parallel Development - Ericnel
Overview Of Parallel Development -  EricnelOverview Of Parallel Development -  Ericnel
Overview Of Parallel Development - Ericnelukdpe
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Databricks
 
Eclipse Con Europe 2014 How to use DAWN Science Project
Eclipse Con Europe 2014 How to use DAWN Science ProjectEclipse Con Europe 2014 How to use DAWN Science Project
Eclipse Con Europe 2014 How to use DAWN Science ProjectMatthew Gerring
 
Distributed Computing & MapReduce
Distributed Computing & MapReduceDistributed Computing & MapReduce
Distributed Computing & MapReducecoolmirza143
 
Splunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageSplunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageDamien Dallimore
 
Simplified Data Processing On Large Cluster
Simplified Data Processing On Large ClusterSimplified Data Processing On Large Cluster
Simplified Data Processing On Large ClusterHarsh Kevadia
 
PowerPoint
PowerPointPowerPoint
PowerPointVideoguy
 
Spark what's new what's coming
Spark what's new what's comingSpark what's new what's coming
Spark what's new what's comingDatabricks
 
Migration To Multi Core - Parallel Programming Models
Migration To Multi Core - Parallel Programming ModelsMigration To Multi Core - Parallel Programming Models
Migration To Multi Core - Parallel Programming ModelsZvi Avraham
 
Network Programming in Java
Network Programming in JavaNetwork Programming in Java
Network Programming in JavaTushar B Kute
 
OGCE Overview for SciDAC 2009
OGCE Overview for SciDAC 2009OGCE Overview for SciDAC 2009
OGCE Overview for SciDAC 2009marpierc
 
ROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor HelicoptersROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor HelicoptersAtılay Mayadağ
 
GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)Huy Do
 
When Web Services Go Bad
When Web Services Go BadWhen Web Services Go Bad
When Web Services Go BadSteve Loughran
 
Introduction to Structured Streaming
Introduction to Structured StreamingIntroduction to Structured Streaming
Introduction to Structured StreamingKnoldus Inc.
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in JavaTushar B Kute
 
Apache Spark: What? Why? When?
Apache Spark: What? Why? When?Apache Spark: What? Why? When?
Apache Spark: What? Why? When?Massimo Schenone
 
Distributed computing poli
Distributed computing poliDistributed computing poli
Distributed computing poliivascucristian
 

Similar a Mpi.Net Talk (20)

GCF
GCFGCF
GCF
 
Overview Of Parallel Development - Ericnel
Overview Of Parallel Development -  EricnelOverview Of Parallel Development -  Ericnel
Overview Of Parallel Development - Ericnel
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...
 
Eclipse Con Europe 2014 How to use DAWN Science Project
Eclipse Con Europe 2014 How to use DAWN Science ProjectEclipse Con Europe 2014 How to use DAWN Science Project
Eclipse Con Europe 2014 How to use DAWN Science Project
 
Distributed Computing & MapReduce
Distributed Computing & MapReduceDistributed Computing & MapReduce
Distributed Computing & MapReduce
 
Splunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the messageSplunk Conf 2014 - Getting the message
Splunk Conf 2014 - Getting the message
 
Simplified Data Processing On Large Cluster
Simplified Data Processing On Large ClusterSimplified Data Processing On Large Cluster
Simplified Data Processing On Large Cluster
 
PowerPoint
PowerPointPowerPoint
PowerPoint
 
Spark what's new what's coming
Spark what's new what's comingSpark what's new what's coming
Spark what's new what's coming
 
Migration To Multi Core - Parallel Programming Models
Migration To Multi Core - Parallel Programming ModelsMigration To Multi Core - Parallel Programming Models
Migration To Multi Core - Parallel Programming Models
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Network Programming in Java
Network Programming in JavaNetwork Programming in Java
Network Programming in Java
 
OGCE Overview for SciDAC 2009
OGCE Overview for SciDAC 2009OGCE Overview for SciDAC 2009
OGCE Overview for SciDAC 2009
 
ROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor HelicoptersROS Based Programming and Visualization of Quadrotor Helicopters
ROS Based Programming and Visualization of Quadrotor Helicopters
 
GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)
 
When Web Services Go Bad
When Web Services Go BadWhen Web Services Go Bad
When Web Services Go Bad
 
Introduction to Structured Streaming
Introduction to Structured StreamingIntroduction to Structured Streaming
Introduction to Structured Streaming
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in Java
 
Apache Spark: What? Why? When?
Apache Spark: What? Why? When?Apache Spark: What? Why? When?
Apache Spark: What? Why? When?
 
Distributed computing poli
Distributed computing poliDistributed computing poli
Distributed computing poli
 

Mpi.Net Talk

  • 1. MPI.NET Supercomputing in .NET using the Message Passing Interface David Ross Email: willmation@gmail.com Blog: www.pebblesteps.com
  • 2. Computationally complex problems in enterprise software ETL load into Data Warehouse takes too long. Use compute clusters to quickly provide a summary report Analyse massive database tables by processing chunks in parallel on the computer cluster Increasing the speed of Monte Carlo analysis problems Filtering/Analysis of massive log files Click through analysis from IIS logs Firewall logs
  • 3. Three Pillars of Concurrency Herb Sutter/David Callahan break parallel computing techniques into: Responsiveness and Isolation Via Asynchronous Agents Active Objects, GUIs, Web Services, MPI Throughput and Scalability Via Concurrent Collections Parallel LINQ, Work Stealing, Open MP Consistency Via Safely Shared Resources Mutable shared Objects, Transactional Memory Source - Dr. Dobb’s Journal http://www.ddj.com/hpc-high-performance-computing/200001985
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. MPI.NETMPI.Net is a wrapper around MS-MPI MPI is complex as C runtime can not infer: Array lengths the size of complex types MPI.NET is far simpler Size of collections etc inferred from the type system automatically IDispose used to setup/teardown MPI session MPI.NET uses “unsafe” handcrafted IL for very fast marshalling of .Net objects to unmanaged MPI API
  • 10. Single Program Multiple Node Same application is deployed to each node Node Id is used to drive application/orchestration logic Fork-Join/Map Reduce are the core paradigms
  • 11. Hello World in MPI public class FrameworkSetup { static void Main(string[] args) { using (new MPI.Environment(ref args)){ string s = String.Format( "My processor is {0}. My rank is {1}", MPI.Environment.ProcessorName, Communicator.world.Rank); Console.WriteLine(s); } } }
  • 12. Executing MPI.NET is designed to be hosted in Windows HPC Server MPI.NET has recently been ported to Mono/Linux - still under development and not recommended Windows HPC Pack SDK mpiexec -n 4 SkillsMatter.MIP.Net.FrameworkSetup.exe My processor is LPDellDevSL.digiterre.com. My rank is 0 My processor is LPDellDevSL.digiterre.com. My rank is 3 My processor is LPDellDevSL.digiterre.com. My rank is 2 My processor is LPDellDevSL.digiterre.com. My rank is 1
  • 13. Send/Receive Logical Topology static void Main(string[] args) { using (new MPI.Environment(ref args)) { if(Communicator.world.Size != 2) throw new Exception("This application must be run with MPI Size == 0" ); for(int i = 0; i < NumberOfPings; i++) { if (Communicator.world.Rank == 0) { string send = "Hello Msg:" + i; Console.WriteLine( "Rank " + Communicator.world.Rank + " is sending: " + send); // Blocking send Communicator.world.Send<string>(send, 1, 0); } Rank drives parallelism data, destination, message tag
  • 14. Send/Receive else { // Blocking receive string s = Communicator.world.Receive<string>(0, 0); Console.WriteLine("Rank "+ Communicator.world.Rank + " recieved: " + s); } Result: Rank 0 is sending: Hello Msg:0 Rank 0 is sending: Hello Msg:1 Rank 0 is sending: Hello Msg:2 Rank 0 is sending: Hello Msg:3 Rank 0 is sending: Hello Msg:4 Rank 1 received: Hello Msg:0 Rank 1 received: Hello Msg:1 Rank 1 received: Hello Msg:2 Rank 1 received: Hello Msg:3 Rank 1 received: Hello Msg:4 source, message tag
  • 15. Send/Receive/Barrier Send/Receive Blocking point to point messaging Immediate Send/Immediate Receive Asynchronous point to point messaging Request object has flags to indicate if operation is complete Barrier Global block All programs halt until statement is executed on all nodes
  • 16. Broadcast/Scatter/Gather/Reduce Broadcast Send data from one Node to All other nodes For a many node system as soon as a node receives the shared data it passes it on Scatter Split an array into Communicator.world.Sizechunks and send a chunk to each node Typically used for sharing rows in a Matrix
  • 17. Broadcast/Scatter/Gather/Reduce Gather Each node sends a chunk of data to the root node Inverse of the Scatter operation Reduce Calculate a result on each node Combine the results into a single value through a reduction (Min, Max, Add, or custom delegate etc...)
  • 18. Data orientated problem static void Main(string[] args) { using (new MPI.Environment(ref args)) { // Load Grades intnumberOfGrades = 0; double[] allGrades = null; if (Communicator.world.Rank == RANK_0) { allGrades = LoadStudentGrades(); numberOfGrades = allGrades.Length; } Communicator.world.Broadcast(ref numberOfGrades, 0); Load Share(populates)
  • 19. // Root splits up array and sends to compute nodes double[] grades = null; intpageSize = numberOfGrades/Communicator.world.Size; if (Communicator.world.Rank == RANK_0) { Communicator.world.ScatterFromFlattened (allGrades,pageSize, 0, ref grades); } else { Communicator.world.ScatterFromFlattened (null, pageSize, 0, ref grades); } Array is broken into pageSize chunks and sent Each chunk is deserialised into grades
  • 20. // Calculate the sum on each node double sumOfMarks = Communicator.world.Reduce<double>(grades.Sum(), Operation<double>.Add, 0); // Calculate and publish average Mark double averageMark = 0.0; if (Communicator.world.Rank == RANK_0) { averageMark = sumOfMarks / numberOfGrades; } Communicator.world.Broadcast(ref averageMark, 0); ... Summarise Share
  • 21. Result Rank: 3, Sum of Marks:0, Average:50.7409948765608, stddev:0 Rank: 2, Sum of Marks:0, Average:50.7409948765608, stddev:0 Rank: 0, Sum of Marks:202963.979506243, Average:50.7409948765608, stddev:28.9402 362588477 Rank: 1, Sum of Marks:0, Average:50.7409948765608, stddev:0
  • 22. Fork-Join Parallelism Load the problem parameters Share the problem with the compute nodes Wait and gather the results Repeat Best Practice: Each Fork-Join block should be treated a separate Unit of Work Preferably as a individual module otherwise spaghetti code can ensue
  • 23. When to use PLINQ or Parallel Task Library (1st choice) Map-Reduce operation to utilise all the cores on a box Web Services / WCF (2nd choice) No data sharing between nodes Load balancer in front of a Web Farm is far easier development MPI Lots of sharing of intermediate results Huge data sets Project appetite to invest in a cluster or to deploy to a cloud MPI + PLINQ Hybrid (3rd choice) MPI moves data PLINQ utilises cores
  • 24. More Information MPI.Net: http://www.osl.iu.edu/research/mpi.net/software/ Google: Windows HPC Pack 2008 SP1 MPI Forum: http://www.mpi-forum.org/ Slides and Source: http://www.pebblesteps.com Thanks for listening...

Notas del editor

  1. Good evening.My name is davidross and tonight I will be talking about the Message Passing Interface which is a high speed messaging framework used in the dvelopment of software on Supercomputers. Due to the commodisationof hardware and
  2. Before I go discuss MPI it is very important when discussing concurrency or parallel programming that we understand the problem space the technology is trying to solve. Herb Sutter who runs the C++ team at Microsoft has broken the multi-core currency problem into 3 aspects. Isolated components, Concurrent collections and safety. MPI falls into the first bucket and is focussed on high speed data transfer between compute nodes.
  3. Assuming we have a problem that is too slow to run under a single process or single machine. We have the problem of orchestrating data transfers and commands between the nodes.
  4. MPI is an API standard not a product and there are many different implementations of the standard. MPI.NET meanwhile uses knowledge of the .NET type system to remove the complexity of using MPI from a language like C. In C u must explicitly state the size of collections and the width of complexity types being transferred. In MPI.NEY the serialisation is far easier.
  5. As we will see in the code examples later MPI.NET is a