1 May 2019 Notes for CSC 2/458 Extension until Sunday evening for final project. Be sure to invest some significant work in the README. Sign up for a demo slot ---------------------------------------- Janus Notation for parallel programming libraries v. languages v. language extensions Hans Boehm argument that (shared memory) threads _cannot_ be done safely in a library mainstream imperative languages Java, C#, C++ Swift, Rust, Go, Scala HPC languages UPC, Titanium, CAF Chapel, Fortress, X10 OpenMP and MPI (mostly) academic niche players Cilk, Habanero Java, ... library packages TBB, shmem, ... High-level distributed frameworks Map-Reduce Pregel, Spark, Grappa, GraphLab, ... think like a vertex (TLAV) TensorFlow Functional -- referential transparency Haskell, OCaml, SML Erlang Specialized CUDA, OpenGL, OpenACC Not much in scripting languages yet dynamic typing a serious obstacle Idioms list comprehensions styles of parallel loops Fortran dopar what most systems do: iterations are independent (assuming race free) HPF forall lines of loop executed in lock step across iterations reductions futures date from Multilisp [1985] (bags of) lightweight tasks Directory-based coherence how to structure HW directories precise v. conservative 3-hop v. 4-hop central arbiter for ordering (SunFire)