8A. Going Parallel

8A. Going Parallel

2019/2020 UniPD - T. Vardanega 02/06/2020 Terminology /1 • Program = static piece of text 8a. Going parallel – Instructions + link-time data • Processor = resource that can execute a program – In a “multi-processor,” processors may – Share uniformly one common address space for main memory – Have non-uniform access to shared memory – Have unshared parts of memory – Share no memory as in “Shared Nothing” (distributed memory) Where we take a bird’s eye look at what architectures changes (again!) when jobs become • Process = instance of program + run-time data parallel in response to the quest for best – Run-time data = registers + stack(s) + heap(s) use of (massively) parallel hardware Parallel Lang Support 505 Terminology /2 Terms in context: LWT within LWP • No uniform naming of threads of control within process –Thread, Kernel Thread, OS Thread, Task, Job, Light-Weight Process, Virtual CPU, Virtual Processor, Execution Agent, Executor, Server Thread, Worker Thread –Taskgenerally describes a logical piece of work – Element of a software architecture –Threadgenerally describes a virtual CPU, a thread of control within a process –Jobin the context of a real-time system generally describes a single execution consequent to a task release Lightweight because OS • No uniform naming of user-level lightweight threads does not schedule threads –Task, Microthread, Picothread, Strand, Tasklet, Fiber, Lightweight Thread, Work Item – Called “user-level” in that scheduling is done by code outside of Exactly the same logic applies to user-level lightweight the kernel/operating-system threads (aka tasklets), which do not need scheduling Parallel Lang Support 506 Parallel Lang Support 507 Real-Time Systems 1 2019/2020 UniPD - T. Vardanega 02/06/2020 SIMD – Single Instruction Multiple Data How to Support Parallel Programming • Vector Processing • Library Approach – Single instruction can operate on “vector” register set, producing – Provide an API for spawning and waiting for tasklets many adds/multiplies, etc. in parallel – Examples: Intel’s TBB, Java Fork/Join, Rust • Graphical Processing Unit – Rust emanates from Mozilla (Graydon Hoare), see http://rust-lang.org • Pragma Approach – Broken into independent “warps” consisting of multiple “lanes” all performing the same operation at the same time – No new syntax – Everything controlled by pragmas on – Typical GPU might be 32 warps of 32 lanes each ~= 1024 cores –Declarations – Modern GPUs allow individual lanes to be conditionally turned on – Loops or off, to allow for “if-then-else” programming –Blocks –Examples: OpenMP, OpenACC • Syntax Approach – Menu of new constructs: Cilk+, CPlex, Go – Go emanates from Google (Rob Pike), see http://golang.org – Building Blocks + Syntactic Sugar: Ada 202X, ParaSail Parallel Lang Support 508 Parallel Lang Support 509 What About Memory Safety? Scheduling All of the Parallel Computing • Language-provided safety is to some extent orthogonal • Fully Symmetric Multiprocessor scheduling out of favor to the approach to parallel programming support – Significant overhead associated with switching processors in the middle of a stream – Harder to provide using Library Approach – Rust does it by having more complex parameter modes • Notion of Processor Affinity introduced to limit threads – Very dependent on amount of “aliasing” in the language (bouncing) migration across processors – Requires additional specification when creating threads • Key question is whether compiler • One-to-One mapping of program threads to kernel 1. Trusts programmer requests and follows orders threads falling out of favor 2. Treats programmer requests as hints, only following safe hints – Kernel thread switching is expensive 3. Treats programmer requests as checkable claims, complaining if • Moving to lightweight threads managed in user space not true – But still need to worry about processor affinity • If compiler does 3, it can insert safe parallelism • Consensus solution is on work stealing (see later) automatically – Small number of kernel threads (server processes) • More on this later – Large number of lightweight user-space threads – Processor affinity managed automatically and adaptively Parallel Lang Support 510 Parallel Lang Support 511 Real-Time Systems 2 2019/2020 UniPD - T. Vardanega 02/06/2020 Library Option: TBB, Java Fork/Join, Rust Pragma Option: OpenMP, OpenACC • Compiler is removed from the picture completely • User provides hints via #pragma – Except for Rust, where compiler enforces memory safety • No building blocks – all smartness in the compiler • Run-time library controls everything • Not conducive to new ways of thinking about the – Focusing on the scheduling problem problem – Needs some run-time notion of “tasklet ID” to know what work to do – Historical example: Ada 95 Passive Tasks vs. Protected Types • Can be verbose and complex Ed Schonberg (NYU, AdaCore) on pragmas – Feels almost like going back to assembly language • The two best-known language-independent (kind of) models of distribution – No real sense of abstraction from details of solution and parallel computation currently in use, OpenMP and OpenACC, both chose – Can use power of C++ templates to approximate syntax approach a pragma-like syntax to annotate a program written in the standard syntax of a sequential language (Fortran, C, C++) • Those annotations typically carry target-specific information (number of threads, chunk size, etc.) • This solution eases the inescapably iterative process of program tuning, because it only needs the annotations to be modified Parallel Lang Support 512 Parallel Lang Support 513 Lesson Learned: Task Interaction /1 Lesson Learned: Task Interaction /2 • Ada 83 relied completely on task + rendezvous • Major battle of ideology synchronization • Final result was Protected Objects added to language – In the manner of CSP • Data-Oriented Synchronization Model Widely Embraced • Users familiar with Mutex, Semaphore, Queue, etc. • Immediately allowed focus to shift to interesting • One solution – Pragma Passive_Task scheduling and implementation issues – Required an idiom – Priority Inheritance – Task body as loop enclosing a single “select with terminate” statement – Priority Ceiling Protocol – Passive_Task optimization turned “active” task into a “slave” to – Priority Ceiling Emulation callers – “Eggshell” model for servicing of entry queues – Executed only when task entry was called, with reduced overhead – Use of “convenient” task to execute entry body to reduce context – A.N. Habermann, I.R. Nassi: Efficient Implementation of Ada Tasks, CMU-CS-80-103, 1980 switches • Ada 9X Team proposed “Protected Objects” – Notion of “requeue” to do some processing and then requeue for later steps of processing – Provided entries like tasks • New way of thinking – Also provided protected functions and procedures for simple Mutex functionality – Use of Task Rendezvous became quite rare Parallel Lang Support 514 Parallel Lang Support 515 Real-Time Systems 3 2019/2020 UniPD - T. Vardanega 02/06/2020 Building Blocks + Syntactic Sugar Option Parallel Block • Ada 202X, ParaSail parallel • Examples – Operators, Indexing, Literals & Aggregates, Iterators sequence_of_statements • New level of abstraction {and – Defining vs. calling a function sequence_of_statements} – Defining vs. using a private type end parallel; – Implementing vs. using syntactic sugar – Each alternative is an explicitly specified “parallelism opportunity” • Minimize built-in-type “magic” (POp) where the compiler may create a tasklet, which can be executed by an execution server while still running under the context of the enclosing task (same task ‘Identity, attributes, etc.) – Compiler will complain if any data races or blocking are possible Parallel Lang Support 516 Parallel Lang Support 517 Parallel Loop Simple and Obvious, but Not Quite • Exiting the block/loop, or a return statement? for I in parallel 1 .. 1_000 loop – All other tasklets are aborted (need not be preemptive) and awaited, A(I) := B(I) + C(I); and then, in the case of return with an expression, the expression is end loop; evaluated, and finally the exit/return takes place – With multiple concurrent exits/returns, one is chosen arbitrarily, and for Elem of parallel Arr loop the others are aborted Elem := Elem * 2; • With a very big range or array to be looped over, wouldn’t end loop; that create a huge number of tasklets? – Compiler may choose to “chunk” the loop into sub-loops, each sub- loop becomes a tasklet (sub-loop runs sequentially within tasklet) – Parallel loop equivalent to parallel block by unrolling loop – Each iteration as a separate alternative of parallel block • Iterations are not completely independent, but could – Compiler will complain if iterations are not independent or might become so by creating multiple accumulators? block – We provide notion of parallel array of such accumulators (next slides) Parallel Lang Support 518 Parallel Lang Support 519 Real-Time Systems 4 2019/2020 UniPD - T. Vardanega 02/06/2020 Parallel Arrays of Accumulators: Map/Reduce /1 Parallel Arrays of Accumulators: Map/Reduce /2 Partial : an array with a dynamic bound 0 0 0 whose elements can be worked on in parallel (the elements of an accumulator must be initialized to 0) 1 n Arr : an input array «mapped» onto Partial 3 2 1 to square all of its elements and sum them up Map & (initial) Reduce 1 n 4 1 9 (Final) Reduce Parallel Lang Support 520 Parallel Lang Support 521 Parallel Languages Can Simplify Multi- Parallel Arrays of Accumulators: Map/Reduce

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    14 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us