SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
CnC-Scala:
A Declarative Approach to
  Multicore Parallelism

       Scala Days
        April 17, 2012

 Shams Imam and Vivek Sarkar
        Rice University


                               1
Acknowledgments
•  Habanero Group
    –  Sagnak Tasirlar
    –  Dragos Sbirlea
    –  Alina Sbirlea

•    “Concurrent Collections” Zoran Budimlic, Michael Burke,
     Vincent Cave, Kathleen Knobe, Geoff Lowney, Ryan
     Newton, Jens Palsberg, David Peixotto, Vivek Sarkar,
     Frank Schlimbach, Sagnak Tasirlar. Scientific
     Programming.
•    “Concurrent Collections: Easy and effective
     distributed computing” Frank Schlimbach, Kath Knobe,
     James Brodman.
                                                            2
Inverted Pyramid of Parallel
      Programming Skills



Parallelism oblivious       Focus of this talk

    developers
                                  Focus of Rice
                                 Habanero Project


       Parallelism
         aware                Habanero-Scala,
          devs             presented earlier today

                            Java threads, locks, etc.
         Concurrency
           Experts
                                                        3
                       http://habanero.rice.edu
The Issue


Parallel programs are notoriously difficult for
 mortals to write, debug, maintain and port.




                                             4
The Big Idea


•  Don’t specify what operations run in parallel
   •  Difficult and depends on target

•  Specify the semantic ordering constraints only
   •  Easier and depends only on application




                                                    5
Exactly Two Sources of Ordering
                 Requirements

•  Producer must execute before consumer

•  Controller must execute before controllee




                                               6
Outline

•  The Concurrent Collections (CnC) Model
     •  Features
     •  Constructs
•  CnC Scala – Example
•  Implementation
•  Results




                                            7
The CnC model

•  Programmer defines semantic dependences
  •    Ordering constraints between computational units
  •    Code in computation unit is standard serial code


•  Runtime takes care of
  •    Executing the computational units
  •    Extracting parallelism in the application




                                                          8
CnC Constructs - Steps


                           (step)	



•  Computational unit of a CnC program
  •    Stateless
  •    Side-effect free
  •    Functional with respect to inputs



                                           9
CnC Constructs – Data Items



       [in_item]
               	               (step)	                  [out_item]
                                                                 	




•  Data units are called Item Collection
  •     Means of communication between steps
  •     Mapping of data tags to items
       •    Items can only be retrieved by their tags
  •     Dynamic single assignment


                                                                     10
CnC Constructs - Control

             <tag>
                 	



       [in_item]
               	          (step)	             [out_item]
                                                       	



•  Tag Collections are control units
  •    Used to execute (prescribe) steps
  •    A CnC step will not launch until its tag has been put




                                                           11
CnC Constructs - Environment
      env
              <tag>
                  	
                                                         env
env
        [in_item]
                	       (step)	        [out_item]
                                                	



      •  A driver which encapsulates the CnC Graph
      •  Provides inputs to and consumes outputs
         from the CnC Graph



                                                    12
Exactly Two Sources of Ordering
                     Requirements

•  Producer must execute before consumer

•  Controller must execute before controllee


     Producer - Consumer          Controller - Controllee

                                           <tag1>	



  (prod)	      [C1]
                  	   (cons)
                           	      (C-er)
                                       	             (C-ee)
                                                          	




                                                              13
Outline

•  The CnC Model
•  CnC-Scala
     •  Build Model
     •  Capitalize-Words Example
     •  Step Code
•  Implementation
•  Results




                                   14
CnC-Scala

•  Written in pure Scala
   •  uses continuations compiler plugin
•  Only dependency – jsr-166y.jar
   •  comes bundled with java 7
•  Distribution with examples available at:
   •  http://cnc-scala.rice.edu/




                                              15
CnC-Scala Build Model

           CnC Graph Spec
              cnc_scala_translate
                                                    - Step code
                                                    - main() method
        Generated Stub code
                                cnc_scala_compile


                            Compiled bytecode

                                    cnc_scala_run
  User Code
                                     Output
Generated Code                                                        16
Capitalize-Words example




1.     import edu.rice.cnc.translator.GraphDescription._	
2.     object SplitCapitalizeCncDefinition extends App {	
3.         // Item Collections	
4.         ItemCollection[String, String]("input")	
5.         ItemCollection[String, String]("words")	
6.         ItemCollection[String, String]("result")	
7.         // Tag Collections	
8.         TagCollection[String]("data")	
9.         TagCollection[String]("token")	
10.        // Step Prescriptions	
11.        Presription("data", List("split"))	
12.        Presription("token", List("capitalize"))	
13.        // Step Dependences	
14.        StepDependence("split", List ("input"), List("token", "words"))	
15.        StepDependence("capitalize", List("words"), List("result"))	
16.        // Environment Collections	
17.        EnvironmentDependence(List("input", "data"), List("result"))	
18.    }	
                                                                              17
Generated Code Example




1.     trait SplitStep extends Step {	
2.        	
3.        // Optional to provide an implementation	
4.        def createDependences(	
5.          tag: java.lang.String, 	
6.          inInput: InputCollection[java.lang.String, java.lang.String],	
7.          dependenceManager: DependenceManager	
8.        ): Unit = {}	
9.        	
10.       // User must provide an implementation for this method	
11.       def compute(	
12.         tag: java.lang.String, 	
13.         inInput: InputCollection[java.lang.String, java.lang.String], 	
14.         outToken: TagCollection[java.lang.String], 	
15.         outWords: OutputCollection[java.lang.String, java.lang.String]	
16.       ): Unit@cpsParam[Any, Any]	
17.    }	

                                                                              18
User Step Code




1.     class UserSplitStep extends SplitStep {	
2.       	
3.       // User must provide an implementation for this method	
4.       def compute(	
5.         tag: java.lang.String, 	
6.         inInput: InputCollection[java.lang.String, java.lang.String], 	
7.         outToken: TagCollection[java.lang.String], 	
8.         outWords: OutputCollection[java.lang.String, java.lang.String]	
9.       ): Unit@cpsParam[Any, Any] = {	

10.        val inString = inInput.get(tag)	
11.        for ((token, index) <- inString.split(" +").view.zipWithIndex) {	
12.           val newTag = tag + ":" + index	
13.           outWords.put(newTag, token)	
14.           outToken.put(newTag)	
15.    } } }	
                                                                               19
User Main




1.     object SplitCapitalizeMain extends CncScalaApp {	

2.          // Instantiate Steps	
3.          val splitStep = new UserSplitStep()	
4.          val capitalizeStep = new UserCapitalizeStep()	
5.          val graph = new SplitCapitalizeGraph(splitStep, capitalizeStep)	
6.          	
7.          graph.run(new Runnable() {	
8.            def run(): Unit = {	
9.               // populate data from environment to collections	
10.              val tag = "1"	
11.              graph.input.put(tag, "hello world")	
12.              graph.data.put(tag)	
13.           }	
14.         })	
15.         // read results	
16.         graph.result.dump(System.out)	
17.    }	
                                                                               20
Outline

•  The CnC Model
•  CnC-Scala
•  Implementation
     •  Data-driven futures
     •  Continuations
•  Results




                                21
Implementation

•  Tag Collections
   •  Spawn new tasks run step code
•  Item Collections
   •  Use concurrent maps with user defined tag types as keys
      and data-driven futures (DDF) as values
   •  What to do when get() has unavailable items?
      •  Create continuations
   •  When value becomes available…
      •  DDFs resume continuations



                                                         22
Data-driven futures

•  Separation of classical “futures” into data and
   control parts
•  Consumers can eagerly register on the DDF even
   before we know about the producer
  •  i.e., lazily attaches a producer to an item
•  When item is produced, all previously registered
   consumers are notified
    •  Subsequent consumers always get the value
       immediately

                                                      23
Continuations

•  Represents rest of the computation from a given
   point in the program
•  Allows
    •  suspending current execution state
    •  resume from that point later
•  We need only delimited one-shot continuations
   •  Scala has shift-reset!



                                                     24
Benefits of using continuations

•  No re-execution of code
•  Allow arbitrary (data-dependent) gets
•  Threads never block
    •  No extra threads created




                                           25
Scala Continuation example
	
1.  object Main {	
2.    def main(args: Array[String]) {	
3.               println("A. Main starts")	
4.               var continuation: (Unit) => Any = null	
                                                           Output:	
5.               reset { // delimit boundary start	
6.                 println("B. Entered reset")	            	
7.                 shift[Unit, Any, Unit] {	               A.   Main starts	
8.                   delimCont =>	                         B.   Entered reset	
9.                       println("C. Entered shift")	      C.   Entered shift	
10.                      continuation = delimCont	         D.   Inside shift	
                                                           F.   Outside reset	
11.                      println("D. Inside shift")	
                                                           G.   Calling cont.	
12.                } 	
                                                           E. After shift	
13.                println("E. After shift")	
                                                           H. Main ends	
14.              } // delimit boundary end	
15.              println("F. Outside reset")	
16.              println("G. Calling cont.")	
17.              continuation()	
18.              println("H. Main ends")	
19.         }	
20.    }	                                                                        26
CnC-Scala Runtime - step

•  Tag Collection step prescription
    •  Wrap each step.compute() in a reset

  // some preparation

  reset {

     step.compute(tag, inputs, outputs)

  }

  // book-keeping logic based on 

  // whether continuation was stored

  // or execution completed normally


                                             27
CnC-Scala Runtime - get

•  If item is available return it
•  Else store continuation

  get(tag: TagType): ItemType = {

     if (itemAvailable)

       return item

     else

       shift { continuation =>

           // store continuation

       }

       // when cont resumes, item is available

       return item

  }	
                                                  28
CnC-Scala Runtime - put

•  Store item
•  Resume waiting continuations

  put(tag: TagType, item: ItemType) {

     // store item into DDF

     // resume ALL waiting continuations

  }	




                                            29
Outline
•    The CnC Model
•    CnC-Scala
•    Implementation
•    Results




                                30
CnC-Scala Results

•  12-core (two hex-cores) 2.8 GHz Intel Westmere
   SMP
•  48 GB memory, running Red Hat Linux (RHEL 6.0)
•  Hotspot JDK 1.7
•  Scala version 2.9.1-1
•  CnC-Scala 0.1.2
•  Arithmetic mean of last thirty iterations from
   hundred iterations on ten separate JVM invocations


                                                  31
Successive Over-Relaxation




•  1 Item Collection, 1 Tag Collection, and 1 Step.
                                                      32
NQueens




•  3 Item Collections, 1 Tag Collection, and 1 Step.
                                                       33
LU Decomposition




•  3 Item Collections, 5 Tag Collections, and 8 Steps.
                                                         34
CnC Features

•    Coordination language
•    Dynamic light-weight task based
•    Single assignment
•    Deterministic
•    Race free




                                       35
Summary

•  CnC exposes more potential parallelism
•  Development is productive
   •  User declaratively defines dependences and
      writes only serial code
   •  runtime hides all the difficulties with using low-
      level techniques
   •  result is deterministic and independent of number
      of threads


                                                    36
Thank you!




[image source: http://www.jerryzeinfeld.com/tag/question-of-the-day/]   37

Contenu connexe

Tendances

Metamodeling of custom Pharo images
 Metamodeling of custom Pharo images Metamodeling of custom Pharo images
Metamodeling of custom Pharo imagesESUG
 
iOS overview
iOS overviewiOS overview
iOS overviewgupta25
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming LanguageUehara Junji
 
Clojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVMClojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVMelliando dias
 
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)DevelopIntelligence
 
Introduction to Clojure
Introduction to ClojureIntroduction to Clojure
Introduction to ClojureRenzo Borgatti
 
Experiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyExperiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyMatthew Gaudet
 
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevJava 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevMattias Karlsson
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?Doug Hawkins
 
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia "What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia Vladimir Ivanov
 
Web注入+http漏洞等描述
Web注入+http漏洞等描述Web注入+http漏洞等描述
Web注入+http漏洞等描述fangjiafu
 
Java Course 13: JDBC & Logging
Java Course 13: JDBC & LoggingJava Course 13: JDBC & Logging
Java Course 13: JDBC & LoggingAnton Keks
 
Core Java Certification
Core Java CertificationCore Java Certification
Core Java CertificationVskills
 
Running Pharo on the GemStone VM
Running Pharo on the GemStone VMRunning Pharo on the GemStone VM
Running Pharo on the GemStone VMESUG
 
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJavaDayUA
 
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureInteractive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureJavaDayUA
 
Java Course 3: OOP
Java Course 3: OOPJava Course 3: OOP
Java Course 3: OOPAnton Keks
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionStephen Colebourne
 

Tendances (20)

2 P Seminar
2 P Seminar2 P Seminar
2 P Seminar
 
Metamodeling of custom Pharo images
 Metamodeling of custom Pharo images Metamodeling of custom Pharo images
Metamodeling of custom Pharo images
 
JDK1.6
JDK1.6JDK1.6
JDK1.6
 
iOS overview
iOS overviewiOS overview
iOS overview
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming Language
 
Clojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVMClojure A Dynamic Programming Language for the JVM
Clojure A Dynamic Programming Language for the JVM
 
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
 
Introduction to Clojure
Introduction to ClojureIntroduction to Clojure
Introduction to Clojure
 
Experiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyExperiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRuby
 
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevJava 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
 
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia "What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
 
Web注入+http漏洞等描述
Web注入+http漏洞等描述Web注入+http漏洞等描述
Web注入+http漏洞等描述
 
Java Course 13: JDBC & Logging
Java Course 13: JDBC & LoggingJava Course 13: JDBC & Logging
Java Course 13: JDBC & Logging
 
Core Java Certification
Core Java CertificationCore Java Certification
Core Java Certification
 
Running Pharo on the GemStone VM
Running Pharo on the GemStone VMRunning Pharo on the GemStone VM
Running Pharo on the GemStone VM
 
JShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java PlatformJShell: An Interactive Shell for the Java Platform
JShell: An Interactive Shell for the Java Platform
 
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureInteractive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
 
Java Course 3: OOP
Java Course 3: OOPJava Course 3: OOP
Java Course 3: OOP
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introduction
 

En vedette

Project kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scalaProject kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scalaSkills Matter Talks
 
Review of "The anatomy of a large scale hyper textual web search engine"
Review of  "The anatomy of a large scale hyper textual web search engine" Review of  "The anatomy of a large scale hyper textual web search engine"
Review of "The anatomy of a large scale hyper textual web search engine" Sai Malleswar
 
EDS selection & implementation @ CCC
EDS selection & implementation @ CCCEDS selection & implementation @ CCC
EDS selection & implementation @ CCCMolly Beestrum
 

En vedette (12)

Scala days mizushima
Scala days mizushimaScala days mizushima
Scala days mizushima
 
Test driven infrastructure
Test driven infrastructureTest driven infrastructure
Test driven infrastructure
 
Project kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scalaProject kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scala
 
Prediction suretogowrong
Prediction suretogowrongPrediction suretogowrong
Prediction suretogowrong
 
Man made marvels
Man made marvelsMan made marvels
Man made marvels
 
Nps
NpsNps
Nps
 
Arvindsujeeth scaladays12
Arvindsujeeth scaladays12Arvindsujeeth scaladays12
Arvindsujeeth scaladays12
 
Proposal parade seni
Proposal parade seniProposal parade seni
Proposal parade seni
 
Frase dan klausa
Frase dan klausaFrase dan klausa
Frase dan klausa
 
Zaharia spark-scala-days-2012
Zaharia spark-scala-days-2012Zaharia spark-scala-days-2012
Zaharia spark-scala-days-2012
 
Review of "The anatomy of a large scale hyper textual web search engine"
Review of  "The anatomy of a large scale hyper textual web search engine" Review of  "The anatomy of a large scale hyper textual web search engine"
Review of "The anatomy of a large scale hyper textual web search engine"
 
EDS selection & implementation @ CCC
EDS selection & implementation @ CCCEDS selection & implementation @ CCC
EDS selection & implementation @ CCC
 

Similaire à Cnc scala-presentation

Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Netcetera
 
Fundamentals of java --- version 2
Fundamentals of java --- version 2Fundamentals of java --- version 2
Fundamentals of java --- version 2Uday Sharma
 
Continuos integration for iOS projects
Continuos integration for iOS projectsContinuos integration for iOS projects
Continuos integration for iOS projectsAleksandra Gavrilovska
 
Постоянное тестирование интеграции
Постоянное тестирование интеграцииПостоянное тестирование интеграции
Постоянное тестирование интеграцииSQALab
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Rittercatherinewall
 
MEAN Inside out (with AngularX)
MEAN Inside out (with AngularX)MEAN Inside out (with AngularX)
MEAN Inside out (with AngularX)paolokersey
 
Typhoon Managed Execution Toolkit
Typhoon Managed Execution ToolkitTyphoon Managed Execution Toolkit
Typhoon Managed Execution ToolkitDimitry Snezhkov
 
Code lifecycle in the jvm - TopConf Linz
Code lifecycle in the jvm - TopConf LinzCode lifecycle in the jvm - TopConf Linz
Code lifecycle in the jvm - TopConf LinzIvan Krylov
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone CivettaCocoaHeads France
 
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...7mind
 
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...Uri Cohen
 
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...Nati Shalom
 
Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...
Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...
Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...Cloud Native Day Tel Aviv
 
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWeare-Legion
 
Auto cad 2006_api_overview
Auto cad 2006_api_overviewAuto cad 2006_api_overview
Auto cad 2006_api_overviewscdhruv5
 
CMake: Improving Software Quality and Process
CMake: Improving Software Quality and ProcessCMake: Improving Software Quality and Process
CMake: Improving Software Quality and ProcessMarcus Hanwell
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with serverEugene Yokota
 

Similaire à Cnc scala-presentation (20)

Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1
 
Fundamentals of java --- version 2
Fundamentals of java --- version 2Fundamentals of java --- version 2
Fundamentals of java --- version 2
 
Continuos integration for iOS projects
Continuos integration for iOS projectsContinuos integration for iOS projects
Continuos integration for iOS projects
 
Постоянное тестирование интеграции
Постоянное тестирование интеграцииПостоянное тестирование интеграции
Постоянное тестирование интеграции
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
 
Surge2012
Surge2012Surge2012
Surge2012
 
Rakuten openstack
Rakuten openstackRakuten openstack
Rakuten openstack
 
MEAN Inside out (with AngularX)
MEAN Inside out (with AngularX)MEAN Inside out (with AngularX)
MEAN Inside out (with AngularX)
 
Typhoon Managed Execution Toolkit
Typhoon Managed Execution ToolkitTyphoon Managed Execution Toolkit
Typhoon Managed Execution Toolkit
 
Code lifecycle in the jvm - TopConf Linz
Code lifecycle in the jvm - TopConf LinzCode lifecycle in the jvm - TopConf Linz
Code lifecycle in the jvm - TopConf Linz
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone Civetta
 
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...
 
Java 9 sneak peek
Java 9 sneak peekJava 9 sneak peek
Java 9 sneak peek
 
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
 
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
 
Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...
Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...
Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack l...
 
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
 
Auto cad 2006_api_overview
Auto cad 2006_api_overviewAuto cad 2006_api_overview
Auto cad 2006_api_overview
 
CMake: Improving Software Quality and Process
CMake: Improving Software Quality and ProcessCMake: Improving Software Quality and Process
CMake: Improving Software Quality and Process
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 

Plus de Skills Matter Talks

Jordan west real workscalazfinal2
Jordan west   real workscalazfinal2Jordan west   real workscalazfinal2
Jordan west real workscalazfinal2Skills Matter Talks
 
(Oleg zhurakousky)spring integration-scala-intro
(Oleg zhurakousky)spring integration-scala-intro(Oleg zhurakousky)spring integration-scala-intro
(Oleg zhurakousky)spring integration-scala-introSkills Matter Talks
 
SCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in Anger
SCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in AngerSCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in Anger
SCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in AngerSkills Matter Talks
 
CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...
CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...
CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...Skills Matter Talks
 
Martin sustrik future_of_messaging
Martin sustrik future_of_messagingMartin sustrik future_of_messaging
Martin sustrik future_of_messagingSkills Matter Talks
 

Plus de Skills Matter Talks (9)

Couch db skillsmatter-prognosql
Couch db skillsmatter-prognosqlCouch db skillsmatter-prognosql
Couch db skillsmatter-prognosql
 
Jordan west real workscalazfinal2
Jordan west   real workscalazfinal2Jordan west   real workscalazfinal2
Jordan west real workscalazfinal2
 
(Oleg zhurakousky)spring integration-scala-intro
(Oleg zhurakousky)spring integration-scala-intro(Oleg zhurakousky)spring integration-scala-intro
(Oleg zhurakousky)spring integration-scala-intro
 
SCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in Anger
SCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in AngerSCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in Anger
SCALA DAYS 2012: Ben Parker on Interactivity - Anti-XML in Anger
 
Real World Scalaz
Real World ScalazReal World Scalaz
Real World Scalaz
 
CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...
CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...
CukeUp! 2012: Michael Nacos on Just enough infrastructure for product develop...
 
Tmt predictions 2011
Tmt predictions 2011Tmt predictions 2011
Tmt predictions 2011
 
Martin sustrik future_of_messaging
Martin sustrik future_of_messagingMartin sustrik future_of_messaging
Martin sustrik future_of_messaging
 
Marek pubsubhuddle realtime_web
Marek pubsubhuddle realtime_webMarek pubsubhuddle realtime_web
Marek pubsubhuddle realtime_web
 

Dernier

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

Cnc scala-presentation

  • 1. CnC-Scala: A Declarative Approach to Multicore Parallelism Scala Days April 17, 2012 Shams Imam and Vivek Sarkar Rice University 1
  • 2. Acknowledgments •  Habanero Group –  Sagnak Tasirlar –  Dragos Sbirlea –  Alina Sbirlea •  “Concurrent Collections” Zoran Budimlic, Michael Burke, Vincent Cave, Kathleen Knobe, Geoff Lowney, Ryan Newton, Jens Palsberg, David Peixotto, Vivek Sarkar, Frank Schlimbach, Sagnak Tasirlar. Scientific Programming. •  “Concurrent Collections: Easy and effective distributed computing” Frank Schlimbach, Kath Knobe, James Brodman. 2
  • 3. Inverted Pyramid of Parallel Programming Skills Parallelism oblivious Focus of this talk developers Focus of Rice Habanero Project Parallelism aware Habanero-Scala, devs presented earlier today Java threads, locks, etc. Concurrency Experts 3 http://habanero.rice.edu
  • 4. The Issue Parallel programs are notoriously difficult for mortals to write, debug, maintain and port. 4
  • 5. The Big Idea •  Don’t specify what operations run in parallel •  Difficult and depends on target •  Specify the semantic ordering constraints only •  Easier and depends only on application 5
  • 6. Exactly Two Sources of Ordering Requirements •  Producer must execute before consumer •  Controller must execute before controllee 6
  • 7. Outline •  The Concurrent Collections (CnC) Model •  Features •  Constructs •  CnC Scala – Example •  Implementation •  Results 7
  • 8. The CnC model •  Programmer defines semantic dependences •  Ordering constraints between computational units •  Code in computation unit is standard serial code •  Runtime takes care of •  Executing the computational units •  Extracting parallelism in the application 8
  • 9. CnC Constructs - Steps (step) •  Computational unit of a CnC program •  Stateless •  Side-effect free •  Functional with respect to inputs 9
  • 10. CnC Constructs – Data Items [in_item] (step) [out_item] •  Data units are called Item Collection •  Means of communication between steps •  Mapping of data tags to items •  Items can only be retrieved by their tags •  Dynamic single assignment 10
  • 11. CnC Constructs - Control <tag> [in_item] (step) [out_item] •  Tag Collections are control units •  Used to execute (prescribe) steps •  A CnC step will not launch until its tag has been put 11
  • 12. CnC Constructs - Environment env <tag> env env [in_item] (step) [out_item] •  A driver which encapsulates the CnC Graph •  Provides inputs to and consumes outputs from the CnC Graph 12
  • 13. Exactly Two Sources of Ordering Requirements •  Producer must execute before consumer •  Controller must execute before controllee Producer - Consumer Controller - Controllee <tag1> (prod) [C1] (cons) (C-er) (C-ee) 13
  • 14. Outline •  The CnC Model •  CnC-Scala •  Build Model •  Capitalize-Words Example •  Step Code •  Implementation •  Results 14
  • 15. CnC-Scala •  Written in pure Scala •  uses continuations compiler plugin •  Only dependency – jsr-166y.jar •  comes bundled with java 7 •  Distribution with examples available at: •  http://cnc-scala.rice.edu/ 15
  • 16. CnC-Scala Build Model CnC Graph Spec cnc_scala_translate - Step code - main() method Generated Stub code cnc_scala_compile Compiled bytecode cnc_scala_run User Code Output Generated Code 16
  • 17. Capitalize-Words example 1.  import edu.rice.cnc.translator.GraphDescription._ 2.  object SplitCapitalizeCncDefinition extends App { 3.  // Item Collections 4.  ItemCollection[String, String]("input") 5.  ItemCollection[String, String]("words") 6.  ItemCollection[String, String]("result") 7.  // Tag Collections 8.  TagCollection[String]("data") 9.  TagCollection[String]("token") 10.  // Step Prescriptions 11.  Presription("data", List("split")) 12.  Presription("token", List("capitalize")) 13.  // Step Dependences 14.  StepDependence("split", List ("input"), List("token", "words")) 15.  StepDependence("capitalize", List("words"), List("result")) 16.  // Environment Collections 17.  EnvironmentDependence(List("input", "data"), List("result")) 18.  } 17
  • 18. Generated Code Example 1.  trait SplitStep extends Step { 2.  3.  // Optional to provide an implementation 4.  def createDependences( 5.  tag: java.lang.String, 6.  inInput: InputCollection[java.lang.String, java.lang.String], 7.  dependenceManager: DependenceManager 8.  ): Unit = {} 9.  10.  // User must provide an implementation for this method 11.  def compute( 12.  tag: java.lang.String, 13.  inInput: InputCollection[java.lang.String, java.lang.String], 14.  outToken: TagCollection[java.lang.String], 15.  outWords: OutputCollection[java.lang.String, java.lang.String] 16.  ): Unit@cpsParam[Any, Any] 17.  } 18
  • 19. User Step Code 1.  class UserSplitStep extends SplitStep { 2.  3.  // User must provide an implementation for this method 4.  def compute( 5.  tag: java.lang.String, 6.  inInput: InputCollection[java.lang.String, java.lang.String], 7.  outToken: TagCollection[java.lang.String], 8.  outWords: OutputCollection[java.lang.String, java.lang.String] 9.  ): Unit@cpsParam[Any, Any] = { 10.  val inString = inInput.get(tag) 11.  for ((token, index) <- inString.split(" +").view.zipWithIndex) { 12.  val newTag = tag + ":" + index 13.  outWords.put(newTag, token) 14.  outToken.put(newTag) 15.  } } } 19
  • 20. User Main 1.  object SplitCapitalizeMain extends CncScalaApp { 2.  // Instantiate Steps 3.  val splitStep = new UserSplitStep() 4.  val capitalizeStep = new UserCapitalizeStep() 5.  val graph = new SplitCapitalizeGraph(splitStep, capitalizeStep) 6.  7.  graph.run(new Runnable() { 8.  def run(): Unit = { 9.  // populate data from environment to collections 10.  val tag = "1" 11.  graph.input.put(tag, "hello world") 12.  graph.data.put(tag) 13.  } 14.  }) 15.  // read results 16.  graph.result.dump(System.out) 17.  } 20
  • 21. Outline •  The CnC Model •  CnC-Scala •  Implementation •  Data-driven futures •  Continuations •  Results 21
  • 22. Implementation •  Tag Collections •  Spawn new tasks run step code •  Item Collections •  Use concurrent maps with user defined tag types as keys and data-driven futures (DDF) as values •  What to do when get() has unavailable items? •  Create continuations •  When value becomes available… •  DDFs resume continuations 22
  • 23. Data-driven futures •  Separation of classical “futures” into data and control parts •  Consumers can eagerly register on the DDF even before we know about the producer •  i.e., lazily attaches a producer to an item •  When item is produced, all previously registered consumers are notified •  Subsequent consumers always get the value immediately 23
  • 24. Continuations •  Represents rest of the computation from a given point in the program •  Allows •  suspending current execution state •  resume from that point later •  We need only delimited one-shot continuations •  Scala has shift-reset! 24
  • 25. Benefits of using continuations •  No re-execution of code •  Allow arbitrary (data-dependent) gets •  Threads never block •  No extra threads created 25
  • 26. Scala Continuation example 1.  object Main { 2.  def main(args: Array[String]) { 3.  println("A. Main starts") 4.  var continuation: (Unit) => Any = null Output: 5.  reset { // delimit boundary start 6.  println("B. Entered reset") 7.  shift[Unit, Any, Unit] { A. Main starts 8.  delimCont => B. Entered reset 9.  println("C. Entered shift") C. Entered shift 10.  continuation = delimCont D. Inside shift F. Outside reset 11.  println("D. Inside shift") G. Calling cont. 12.  } E. After shift 13.  println("E. After shift") H. Main ends 14.  } // delimit boundary end 15.  println("F. Outside reset") 16.  println("G. Calling cont.") 17.  continuation() 18.  println("H. Main ends") 19.  } 20.  } 26
  • 27. CnC-Scala Runtime - step •  Tag Collection step prescription •  Wrap each step.compute() in a reset // some preparation
 reset {
 step.compute(tag, inputs, outputs)
 }
 // book-keeping logic based on 
 // whether continuation was stored
 // or execution completed normally 27
  • 28. CnC-Scala Runtime - get •  If item is available return it •  Else store continuation get(tag: TagType): ItemType = {
 if (itemAvailable)
 return item
 else
 shift { continuation =>
 // store continuation
 }
 // when cont resumes, item is available
 return item
 } 28
  • 29. CnC-Scala Runtime - put •  Store item •  Resume waiting continuations put(tag: TagType, item: ItemType) {
 // store item into DDF
 // resume ALL waiting continuations
 } 29
  • 30. Outline •  The CnC Model •  CnC-Scala •  Implementation •  Results 30
  • 31. CnC-Scala Results •  12-core (two hex-cores) 2.8 GHz Intel Westmere SMP •  48 GB memory, running Red Hat Linux (RHEL 6.0) •  Hotspot JDK 1.7 •  Scala version 2.9.1-1 •  CnC-Scala 0.1.2 •  Arithmetic mean of last thirty iterations from hundred iterations on ten separate JVM invocations 31
  • 32. Successive Over-Relaxation •  1 Item Collection, 1 Tag Collection, and 1 Step. 32
  • 33. NQueens •  3 Item Collections, 1 Tag Collection, and 1 Step. 33
  • 34. LU Decomposition •  3 Item Collections, 5 Tag Collections, and 8 Steps. 34
  • 35. CnC Features •  Coordination language •  Dynamic light-weight task based •  Single assignment •  Deterministic •  Race free 35
  • 36. Summary •  CnC exposes more potential parallelism •  Development is productive •  User declaratively defines dependences and writes only serial code •  runtime hides all the difficulties with using low- level techniques •  result is deterministic and independent of number of threads 36
  • 37. Thank you! [image source: http://www.jerryzeinfeld.com/tag/question-of-the-day/] 37