ERLANG EVOLVES FOR MULTI-CORE AND CLOUD ENVIRONMENTS

Similar documents
The Golden Trinity of Erlang How Something Simple Has Real Business Value

An Introduction to Erlang

Scaling Erlang to 10,000 cores.!!! Simon Thompson, University of Kent

2015 Erlang Solutions Ltd

FRANCESCO CESARINI. presents ERLANG/OTP. Francesco Cesarini Erlang

Thinking in a Highly Concurrent, Mostly-functional Language

Erlang. Joe Armstrong.

An Introduction to Erlang

An Introduction to Erlang

Functional Programming In Real Life

concurrent programming XXL

Designing and debugging real-time distributed systems

Cloud Programming James Larus Microsoft Research. July 13, 2010

Taking a Virtual Machine Towards Many-Cores. Rickard Green - Patrik Nyblom -

CloudI Integration Framework. Chicago Erlang User Group May 27, 2015

All you need is fun. Cons T Åhs Keeper of The Code

<Urban.Boquist. com> Rev PA

SQL Azure as a Self- Managing Database Service: Lessons Learned and Challenges Ahead

Message Passing. Advanced Operating Systems Tutorial 7

WOMBATOAM OPERATIONS & MAINTENANCE FOR ERLANG & ELIXIR SYSTEMS

WOMBATOAM OPERATIONS & MAINTENANCE FOR ERLANG & ELIXIR SYSTEMS

HiTune. Dataflow-Based Performance Analysis for Big Data Cloud

Distributed Scheduling for the Sombrero Single Address Space Distributed Operating System

Lightweight Streaming-based Runtime for Cloud Computing. Shrideep Pallickara. Community Grids Lab, Indiana University

BEAMJIT: An LLVM based just-in-time compiler for Erlang. Frej Drejhammar

Resources and Services Virtualization without Boundaries (ReSerVoir)

DEMYSTIFYING BIG DATA WITH RIAK USE CASES. Martin Schneider Basho Technologies!

Francesco Cesarini. Concurrency + Distribution = Availability + Scalability.

Adaptive Cluster Computing using JavaSpaces

Developing MapReduce Programs

Using the SDACK Architecture to Build a Big Data Product. Yu-hsin Yeh (Evans Ye) Apache Big Data NA 2016 Vancouver

The Actor Model applied to the Raspberry Pi and the Embedded Domain. Omer

Software Architecture

MongooseIM - Messaging that Scales

Erlang. Joe Armstrong

Embedded Systems: Projects

A Holistic View of Telco Clouds

Cluster-Based Scalable Network Services

Soft shadows. Steve Marschner Cornell University CS 569 Spring 2008, 21 February

Claude TADONKI. MINES ParisTech PSL Research University Centre de Recherche Informatique

Course Syllabus: Lifting Off into Space-Based Architecture with Magic xpi 4.x

WHITE PAPER NGINX An Open Source Platform of Choice for Enterprise Website Architectures

AWS Lambda: Event-driven Code in the Cloud

Gavin Payne Senior Consultant.

Building a government cloud Concepts and Solutions

Chapter 5. The MapReduce Programming Model and Implementation

EUC 2015 MongooseIM The Right Tool for Scalable Messaging. Michał Piotrowski

Above the Clouds: Introducing Akka. Jonas Bonér Scalable Solutions

THE VMTURBO CLOUD CONTROL PLANE

Architekturen für die Cloud

StreamBox: Modern Stream Processing on a Multicore Machine

Introduction to Virtualization. From NDG In partnership with VMware IT Academy

Linux multi-core scalability

Parallelism. Parallel Hardware. Introduction to Computer Systems

The New Enterprise Network In The Era Of The Cloud. Rohit Mehra Director, Enterprise Communications Infrastructure IDC

Systematic Cooperation in P2P Grids

TITLE: PRE-REQUISITE THEORY. 1. Introduction to Hadoop. 2. Cluster. Implement sort algorithm and run it using HADOOP

Implementing the Twelve-Factor App Methodology for Developing Cloud- Native Applications

Performance Tools for Technical Computing

The Next Generation of Extreme OLTP Processing with Oracle TimesTen

Minimizing the Risks of OpenStack Adoption

Robust Erlang (PFP Lecture 11) John Hughes

Concurrency: what, why, how

Programmable Peer-to-Peer Systems

Half full or half empty? William Gropp Mathematics and Computer Science

MySQL As A Service. Operationalizing 19 Years of Infrastructure at GoDaddy

HSA Foundation! Advanced Topics on Heterogeneous System Architectures. Politecnico di Milano! Seminar Room (Bld 20)! 15 December, 2017!

Task Scheduling of Real- Time Media Processing with Hardware-Assisted Virtualization Heikki Holopainen

CUDA GPGPU Workshop 2012

VMware - VMware vsphere: Install, Configure, Manage [V6.7]

Mission-Critical Databases in the Cloud. Oracle RAC in Microsoft Azure Enabled by FlashGrid Software.

Lecture Topics. Announcements. Today: Advanced Scheduling (Stallings, chapter ) Next: Deadlock (Stallings, chapter

Assignment 5. Georgia Koloniari

CS370 Operating Systems

Cache Coherence. CMU : Parallel Computer Architecture and Programming (Spring 2012)

OVERVIEW OF DIFFERENT APPLICATION SERVER MODELS

PBS PROFESSIONAL VS. MICROSOFT HPC PACK

Gustavo Alonso, ETH Zürich. Web services: Concepts, Architectures and Applications - Chapter 1 2

Setting up Kubernetes with Day 2 in Mind. Angela Chin, Senior Software Engineer, Pivotal Urvashi Reddy, Senior Software Engineer, Pivotal

The 7 deadly sins of cloud computing [2] Cloud-scale resource management [1]

Online Course Evaluation. What we will do in the last week?

Ghaffari, Amir (2015) The scalability of reliable computation in Erlang. PhD thesis.

Introduction to Parallel Programming

CSCI-GA Multicore Processors: Architecture & Programming Lecture 3: The Memory System You Can t Ignore it!

Experiments in OTP-Compliant Dataflow Programming

Mesosphere and the Enterprise: Run Your Applications on Apache Mesos. Steve Wong Open Source Engineer {code} by Dell

Scalable Tools - Part I Introduction to Scalable Tools

Super-Peer Architectures for Distributed Computing

Programming Paradigms

Erlang and Concurrency. André Pang Rising Sun Research

Erlang 101. Google Doc

Erlang and VoltDB TechPlanet 2012 H. Diedrich

Erlang in the battlefield. Łukasz Kubica Telco BSS R&D Department Cracow Erlang Factory Lite, 2013

Visual Design Flows for Faster Debug and Time to Market FlowTracer White Paper

The 7 Habits of Highly Effective API and Service Management

Scaling DreamFactory

Vmware VCP550PSE. VMware Certified Professional on vsphere 5.

Network Slicing Supported by Dynamic VIM Instantatiation. Stuart Clayman Dept of Electronic Engineering University College London

BUILDING the VIRtUAL enterprise

CSE 120 Principles of Operating Systems

Transcription:

ERLANG EVOLVES FOR MULTI-CORE AND CLOUD ENVIRONMENTS Torben Hoffmann Erlang Solutions Ltd. @LeHoff http://musings-of-an-erlang-priest.blogspot.dk/ 1

Agenda Erlang fundamentals Challenges 2 2

Warning 1: The Truth I will do a few simplifications in order to get the main points across. 3

Warning 1: The Truth 3 I will do a few simplifications in order to get the main points across. 3

Warning 1: The Truth Will you tell the truth? 3 I will do a few simplifications in order to get the main points across. 3

Warning 1: The Truth Will you tell the truth? Yes 3 I will do a few simplifications in order to get the main points across. 3

Warning 1: The Truth Will you tell the truth? Yes The whole truth? 3 I will do a few simplifications in order to get the main points across. 3

Warning 1: The Truth Will you tell the truth? The whole truth? Yes No 3 I will do a few simplifications in order to get the main points across. 3

Warning 1: The Truth Will you tell the truth? The whole truth? Yes No So help you OTP? 3 I will do a few simplifications in order to get the main points across. 3

Warning 1: The Truth Will you tell the truth? The whole truth? So help you OTP? Yes No Yes 3 I will do a few simplifications in order to get the main points across. 3

Warning 2: Serious Love Ahead I love Erlang! 4 It was part of a major career shift and I have never looked back. Apologies if I get too intense. 4

Realities Of Software Development Time-to-market pressure Scaling successes Maintenance burden Utilisation of computing resources 5 5

What Could Be... 6 3x productivity over C++/Java Seamless scaling on multicore Scaling nicely over machines Less code per feature The future is here today - it s called Erlang! 6

What Could Be... 6 3x productivity over C++/Java Seamless scaling on multicore Scaling nicely over machines Less code per feature The future is here today - it s called Erlang! 6

What Could Be... 6 3x productivity over C++/Java Seamless scaling on multicore Scaling nicely over machines Less code per feature The future is here today - it s called Erlang! 6

What Could Be... 6 3x productivity over C++/Java Seamless scaling on multicore Scaling nicely over machines Less code per feature The future is here today - it s called Erlang! 6

What Could Be... 6 3x productivity over C++/Java Seamless scaling on multicore Scaling nicely over machines Less code per feature The future is here today - it s called Erlang! 6

What Could Be... The future is here... 6 3x productivity over C++/Java Seamless scaling on multicore Scaling nicely over machines Less code per feature The future is here today - it s called Erlang! 6

What Could Be... The future is here... The future is Erlang! 6 3x productivity over C++/Java Seamless scaling on multicore Scaling nicely over machines Less code per feature The future is here today - it s called Erlang! 6

Erlang s Original Requirements 7 7

Erlang s Original Requirements Large scale concurrency 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Very large software systems 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Complex functionality Very large software systems 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Complex functionality Very large software systems Continuous operation for many years 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Complex functionality Very large software systems Continuous operation for many years Software maintenance on-the-fly 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Complex functionality Very large software systems Continuous operation for many years Software maintenance on-the-fly High quality and reliability 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Complex functionality Very large software systems Continuous operation for many years Software maintenance on-the-fly High quality and reliability Fault tolerance 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Complex functionality Very large software systems Continuous operation for many years Software maintenance on-the-fly High quality and reliability Sounds familiar? Fault tolerance 7 7

Erlang s Original Requirements Large scale concurrency Soft real-time Distributed systems Hardware interaction Complex functionality Very large software systems Continuous operation for many years Software maintenance on-the-fly High quality and reliability Sounds familiar? Sounds good, right? Fault tolerance 7 7

General vs Domain Specific Small semantic gap Telecom 8 8

General vs Domain Specific Small semantic gap Telecom C++/Java 8 8

General vs Domain Specific Small semantic gap Telecom C++/Java 8 8

General vs Domain Specific Small semantic gap Telecom C++/Java Erlang 8 8

General vs Domain Specific Small semantic gap Telecom C++/Java Erlang 8 8

General vs Domain Specific Small semantic gap Telecom C++/Java Erlang Smaller gap = benefits! 8 8

Erlang s Sweet Spot GUI Middleware Erlang Coordination Control Drivers 9 Erlang was intended to deal with the control plane in telecom, which is all about orchestration of what goes on. GUI and low-level things are not what Erlang was created for - hence Erlang has good support for integration with other languages. Read the wonderful doctor thesis by Bjarne Däcker if you want to learn more: http:// 9

Other Erlang Domains Messaging - XMPP et al - ejabberd, MongooseIM Webservers - Yaws, Chicago Boss Payment switches & soft switches - Vocalink, OpenFlow/LINC Distributed Databases - Riak, CouchDB, Scalaris 10 10

Other Erlang Domains Messaging - XMPP et al - ejabberd, MongooseIM Webservers - Yaws, Chicago Boss Payment switches & soft switches - Vocalink, OpenFlow/LINC Distributed Databases - Riak, CouchDB, Scalaris If the tool fits, you must select! Tech Mesh Conference 4-5 December London 10 10

To Share Or Not To Share 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory P1 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory P1 P2 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt P2 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt Memory 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt Memory P1 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt Memory Memory P1 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt Memory Memory P1 P2 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt Corrupt Memory P2 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

To Share Or Not To Share Memory Corrupt Memory P2 11 Death propagates in shared memory unless you do a ton of defensive programming. Due to the actor model with no shared memory it is custom in Erlang to do fail-fast programming. No shared memory allows you to fail fast when suitable. Erlang uses message passing between processes to exchange information. 11

Dealing With Failures P1 P2 link = die together P1 P2 monitor = notification of death 12 The ability to link processes and monitor them is the key to adopting fail-fast fully. Link & monitor works across machines! 12

Supervision Trees supervisor supervisor worker worker worker worker worker The OTP library is built on this principle 13 Robust systems does not happen by accident - even in Erlang! You have to think about the consequences of a worker process that fails and let the supervisor take appropriate actions. Using the OTP library s components makes it straightforward to implement the supervision tree, which has the added benefit that all things are started in the right order. 13

Distribution Over Cores Core Core Scheduler Scheduler Processes Processes 14 There is 1 scheduler per core. The VM tries to load balance across the available cores. Scales extremely well with the addition of extra cores - WITHOUT changing the programs! 14

Distribution Over Machines 15 Each instance of the Erlang runtime is called a node. There can be several nodes on one machine if you fancy that. Nodes detect when other nodes are not around any more - the programmer can then decide what to do. If you have the PID (Process Identifier) of a process you do not care which node it is on. You 15

Distribution Over Machines Node 15 Each instance of the Erlang runtime is called a node. There can be several nodes on one machine if you fancy that. Nodes detect when other nodes are not around any more - the programmer can then decide what to do. If you have the PID (Process Identifier) of a process you do not care which node it is on. You 15

Distribution Over Machines Node Node 15 Each instance of the Erlang runtime is called a node. There can be several nodes on one machine if you fancy that. Nodes detect when other nodes are not around any more - the programmer can then decide what to do. If you have the PID (Process Identifier) of a process you do not care which node it is on. You 15

Distribution Over Machines Node Node Node 15 Each instance of the Erlang runtime is called a node. There can be several nodes on one machine if you fancy that. Nodes detect when other nodes are not around any more - the programmer can then decide what to do. If you have the PID (Process Identifier) of a process you do not care which node it is on. You 15

Distribution Over Machines Node Node Node Node 15 Each instance of the Erlang runtime is called a node. There can be several nodes on one machine if you fancy that. Nodes detect when other nodes are not around any more - the programmer can then decide what to do. If you have the PID (Process Identifier) of a process you do not care which node it is on. You 15

Staying Alive... Learn New Moves! 16 As style changed a new group entered the top of the hip scale. For most it meant a serious restart or a stop altogether. 16

Staying Alive... Learn New Moves! 16 As style changed a new group entered the top of the hip scale. For most it meant a serious restart or a stop altogether. 16

Staying Alive... Learn New Moves! 16 As style changed a new group entered the top of the hip scale. For most it meant a serious restart or a stop altogether. 16

Staying Alive... Learn New Moves! 16 As style changed a new group entered the top of the hip scale. For most it meant a serious restart or a stop altogether. 16

Staying Alive Erlang Style 17 With Erlang you can survive upgrades without loosing service. Along with the code change signal you specify how the internal state of the process should be updated before continuing. 17

Staying Alive Erlang Style Process running v1 17 With Erlang you can survive upgrades without loosing service. Along with the code change signal you specify how the internal state of the process should be updated before continuing. 17

Staying Alive Erlang Style Process running v1 Code loaded: v2 17 With Erlang you can survive upgrades without loosing service. Along with the code change signal you specify how the internal state of the process should be updated before continuing. 17

Staying Alive Erlang Style Process running Code change signal v1 Code loaded: v2 17 With Erlang you can survive upgrades without loosing service. Along with the code change signal you specify how the internal state of the process should be updated before continuing. 17

Staying Alive Erlang Style Process running Code change signal v1 v2 Code loaded: v2 17 With Erlang you can survive upgrades without loosing service. Along with the code change signal you specify how the internal state of the process should be updated before continuing. 17

Challenges 18 18

How Will I Know If It Really Scales? Performance??? Cores/Machines 19 A Scalability Benchmark Suite for Erlang/OTP. http://www.softlab.ntua.gr/release/bencherl/index.html A number of synthetic benchmarks plus real-world (dialyzer and scalaris). Extendable to test your own application. 19

How Will I Know If It Really Scales? Performance Bencherl Cores/Machines 19 A Scalability Benchmark Suite for Erlang/OTP. http://www.softlab.ntua.gr/release/bencherl/index.html A number of synthetic benchmarks plus real-world (dialyzer and scalaris). Extendable to test your own application. 19

Who Is Doing What? Core Core Scheduler Scheduler Processes Processes 20 20

Who Is Doing What? Core Core Scheduler When is this Scheduler process running? Processes Processes 20 20

Who Is Doing What? Core Core Scheduler When is this Scheduler process running? Processes Processes Who started this guy? 20 20

Percept2 To The Rescue Active functions 21 Percept: Erlang Concurrency Profiling Tool, utilizes trace informations and profiler events to form a picture of the processes's and ports runnability. Percept2 is an extension of Percept (part of the OTP release). Extensions: # of schedulers active, active functions, process migration, message passing stats, inter-node communication 21

Memory Alloc Previously R12B-1 Scheduler N Scheduler 2 Scheduler 1 Thread N Thread 1 sl_alloc sl_alloc sl_alloc eheap_alloc eheap_alloc eheap_alloc binary_alloc binary_alloc binary_alloc ets_alloc ets_alloc ets_alloc mseg_alloc 22 One central memory allocator for all schedulers on the same machine 22

Memory Alloc Now R15B Scheduler N Scheduler 2 Scheduler 1 Thread N Thread 1 sl_alloc sl_alloc sl_alloc sl_alloc eheap_alloc eheap_alloc eheap_alloc eheap_alloc binary_alloc binary_alloc binary_alloc binary_alloc ets_alloc ets_alloc ets_alloc ets_alloc mseg_alloc mseg_alloc mseg_alloc mseg_alloc 23 One central memory allocator for all schedulers on the same machien 23

Upgrading Blocks Current Code Next Code Load code All schedulers blocked 24 24

Upgrade Without Blocking Current Code Next Code Last Code Load code Each scheduler does it when needed 25 Coming in R16! 25

Fully Connected 26 Erlang connects all nodes fully. So you get a lot of connections. 26

Scaling Over Machines Node Node Node Node Node 27 A fully connected system might not be right for every problem. s_groups allows you to create clusters of nodes. Nodes inside a cluster are fully connected. Connections between clusters can be arbitrary. 27

Managing Erlang Systems 28 Basic Erlang has the ability to go in and monitor what is going on in any node you can attach yourself to. But no tool exists to manage a big number of nodes in a coherent fashion. This is no different from any other language/technology! 28

Managing Erlang Systems Provision machines 28 Basic Erlang has the ability to go in and monitor what is going on in any node you can attach yourself to. But no tool exists to manage a big number of nodes in a coherent fashion. This is no different from any other language/technology! 28

Managing Erlang Systems Provision machines Deploy Erlang application 28 Basic Erlang has the ability to go in and monitor what is going on in any node you can attach yourself to. But no tool exists to manage a big number of nodes in a coherent fashion. This is no different from any other language/technology! 28

Managing Erlang Systems Provision machines Attach to node Deploy Erlang application 28 Basic Erlang has the ability to go in and monitor what is going on in any node you can attach yourself to. But no tool exists to manage a big number of nodes in a coherent fashion. This is no different from any other language/technology! 28

Managing Erlang Systems Provision machines Attach to node Dig out metrics Deploy Erlang application 28 Basic Erlang has the ability to go in and monitor what is going on in any node you can attach yourself to. But no tool exists to manage a big number of nodes in a coherent fashion. This is no different from any other language/technology! 28

Managing Erlang Systems Provision machines Attach to node Dig out metrics Deploy Erlang application Memory usage CPU load Process hierarchy 28 Basic Erlang has the ability to go in and monitor what is going on in any node you can attach yourself to. But no tool exists to manage a big number of nodes in a coherent fashion. This is no different from any other language/technology! 28

Managing Big Systems CCL /sɪˈsɪlɪ/ 29 Erlang Solutions are building a tool as part of the RELEASE project to manage and operate big Erlang systems. CCL = Cloud Computing Lace or Cloud Cuckoo Land depending on your mood. 29

Erlang And Parallelism 30 30

Erlang And Parallelism Created for 30 30

Erlang And Parallelism Created for - explicit concurrency 30 30

Erlang And Parallelism Created for - - explicit concurrency fault tollerance 30 30

Erlang And Parallelism Created for - - - explicit concurrency fault tollerance highly concurrent systems 30 30

Erlang And Parallelism Created for - - - explicit concurrency fault tollerance highly concurrent systems No direct support for 30 30

Erlang And Parallelism Created for - - - explicit concurrency fault tollerance highly concurrent systems No direct support for - matrix multiplication 30 30

Erlang And Parallelism Created for - - - explicit concurrency fault tollerance highly concurrent systems No direct support for - - matrix multiplication ray tracing 30 30

Erlang And Parallelism Created for - - - explicit concurrency fault tollerance highly concurrent systems No direct support for - - - matrix multiplication ray tracing coarse grained parallel problems 30 30

Intensional Parallelism 31 We are taking the good things from what has been learnt in the Haskell & Data-flow language communities and building a DSL which helps us leverage these types of parallel optimisations" 31

Intensional Parallelism Lucid like: demand-driven data computation Find short comings in the Erlang VM Variables are infinite streams of values 31 We are taking the good things from what has been learnt in the Haskell & Data-flow language communities and building a DSL which helps us leverage these types of parallel optimisations" 31

Intensional Parallelism Lucid like: demand-driven data computation Find short comings in the Erlang VM Variables are infinite streams of values running_avg where sum = first(input) fby sum + next(input); n = 1 fby n + 1; running_avg = sum / n; end; 31 We are taking the good things from what has been learnt in the Haskell & Data-flow language communities and building a DSL which helps us leverage these types of parallel optimisations" 31

Intensional Parallelism Lucid like: demand-driven data computation Find short comings in the Erlang VM Variables are infinite streams of values running_avg Black magic where sum = first(input) fby sum + next(input); n = 1 fby n + 1; running_avg = sum / n; end; 31 We are taking the good things from what has been learnt in the Haskell & Data-flow language communities and building a DSL which helps us leverage these types of parallel optimisations" 31

Going Forward 32 32

Going Forward Consider Erlang when the problem fits 32 32

Going Forward Consider Erlang when the problem fits More focus on right tool for the job 32 32

Going Forward Consider Erlang when the problem fits More focus on right tool for the job 32 32