The Implementation of the Cilk-5 Multithreaded Language

Total Page:16

File Type:pdf, Size:1020Kb

The Implementation of the Cilk-5 Multithreaded Language The Implementation of the Cilk Multithreaded Language Matteo Frigo Charles E Leiserson Keith H Randall MIT Lab oratory for Computer Science Technology Square Cambridge Massachusetts fathenacelrandallglcsmitedu our latest Cilk release still uses a theoretically ecient Abstract scheduler but the language has b een simplied considerably The fth release of the multithreaded language Cilk uses a It employs callreturn semantics for parallelism and features provably go o d workstealing scheduling algorithm similar a linguistically simple inlet mechanism for nondeterminis to the rst system but the language has b een completely re designed and the runtime system completely reengineered tic control Cilk is designed to run eciently on contem The eciency of the new implementation was aided by a p orary symmetric multipro cessors SMPs which feature clear strategy that arose from a theoretical analysis of the hardware supp ort for shared memory We have co ded many scheduling algorithm concentrate on minimizing overheads applications in Cilk including the So crates and Cilkchess that contribute to the work even at the exp ense of overheads chessplaying programs which have won prizes in interna that contribute to the critical path Although it may seem counterintuitive to move overheads onto the critical path tional comp etitions this workrst principle has led to a p ortable Cilk im The philosophy b ehind Cilk development has b een to plementation in which the typical cost of spawning a parallel make the Cilk language a true parallel extension of C b oth thread is only b etween and times the cost of a C function semantically and with resp ect to p erformance On a paral call on a variety of contemp orary machines Many Cilk pro lel computer Cilk control constructs allow the program to grams run on one pro cessor with virtually no degradation compared to equivalent C programs This pap er describ es execute in parallel If the Cilk keywords for parallel control how the workrst principle was exploited in the design of are elided from a Cilk program however a syntactically and Cilk s compiler and its runtime system In particular we semantically correct C program results which we call the C present Cilk s novel twoclone compilation strategy and elision or more generally the serial elision of the Cilk its Dijkstralike mutualexclusion proto col for implementing program Cilk is a faithful extension of C b ecause the C the ready deque in the workstealing scheduler elision of a Cilk program is a correct implementation of the semantics of the program Moreover on one pro cessor a Keywords parallel Cilk program scales down to run nearly as fast as Critical path multithreading parallel computing program its C elision ming language runtime system work Unlike in Cilk where the Cilk scheduler was an identi able piece of co de in Cilk b oth the compiler and runtime Intro duction system b ear the resp onsibility for scheduling To obtain ef Cilk is a multithreaded language for parallel programming ciency we have of course attempted to reduce scheduling that generalizes the semantics of C by intro ducing linguistic overheads Some overheads have a larger impact on execu constructs for parallel control The original Cilk release tion time than others however A theoretical understanding featured a provably ecient randomized work of Cilks scheduling algorithm has allowed us to iden stealing scheduler but the language was clumsy tify and optimize the common cases According to this ab b ecause parallelism was exp osed by hand using explicit stract theory the p erformance of a Cilk computation can b e continuation passing The Cilk language implemented by characterized by two quantities its work which is the to tal time needed to execute the computation serially and its This research was supp orted in part by the Defense Advanced criticalpath length which is its execution time on an in Research Pro jects Agency DARPA under Grant N Computing facilities were provided by the MIT Xolas Pro ject thanks nite numb er of pro cessors Cilk provides instrumentation to a generous equipment donation from Sun Microsystems that allows a user to measure these two quantities Within Cilks scheduler we can identify a given cost as contribut To app ear in Proceedings of the ACM SIGPLAN ing to either work overhead or criticalpath overhead Much Conference on Programming Language Design and Im plementation PLDI Montreal Canada June of the eciency of Cilk derives from the following principle which we shall justify in Section include stdlibh The workrst principle Minimize the schedul include stdioh ing overhead borne by the work of a computation include cilkh Specical ly move overheads out of the work and onto the critical path cilk int fib int n The workrst principle played an imp ortant role during the if n return n design of earlier Cilk systems but Cilk exploits the prin else int x y ciple more extensively x spawn fib n The workrst principle inspired a twoclone strategy y spawn fib n for compiling Cilk programs Our cilkc compiler is a sync return xy typ echecking sourcetosource translator that transforms a Cilk source into a C p ostsource which makes calls to Cilks runtime library The C p ostsource is then run through the cilk int main int argc char argv gcc compiler to pro duce ob ject co de The cilkc compiler pro duces two clones of every Cilk pro cedurea fast clone int n result and a slow clone The fast clone which is identical in n atoiargv result spawn fibn most resp ects to the C elision of the Cilk program executes sync in the common case where serial semantics suce The slow printf Result dn result clone is executed in the infrequent case that parallel seman return tics and its concomitant b o okkeeping are required All com munication due to scheduling o ccurs in the slow clone and contributes to criticalpath overhead but not to work over Figure A simple Cilk program to compute the nth Fib onacci numb er in parallel using a very bad algorithm head The workrst principle also inspired a Dijkstralike sharedmemory mutualexclusion proto col as part of the The basic Cilk language can b e understo o d from an exam runtime loadbalancing scheduler Cilks scheduler uses a ple Figure shows a Cilk program that computes the nth workstealing algorithm in which idle pro cessors called Fib onacci numb er Observe that the program would b e an thieves steal threads from busy pro cessors called vic ordinary C program if the three keywords cilk spawn and tims Cilks scheduler guarantees that the cost of steal sync are elided ing contributes only to criticalpath overhead and not to The keyword cilk identies fib as a Cilk procedure work overhead Nevertheless it is hard to avoid the mutual which is the parallel analog to a C function Parallelism exclusion costs incurred by a p otential victim which con is created when the keyword spawn precedes the invo cation tribute to work To minimize work overhead instead of using of a pro cedure The semantics of a spawn diers from a lo cking Cilks runtime system uses a Dijkstralike proto col C function call only in that the parent can continue to ex which we call the THE proto col to manage the runtime ecute in parallel with the child instead of waiting for the deque of ready threads in the workstealing algorithm An child to complete as is done in C Cilks scheduler takes the added advantage of the THE proto col is that it allows an resp onsibility of scheduling the spawned pro cedures on the exception to b e signaled to a working pro cessor with no ad pro cessors of the parallel computer ditional work overhead a feature used in Cilks ab ort mech A Cilk pro cedure cannot safely use the values returned by anism its children until it executes a sync statement The sync The remainder of this pap er is organized as follows Sec statement is a lo cal barrier not a global one as for ex tion overviews the basic features of the Cilk language Sec ample is used in messagepassing programming In the Fi tion justies the workrst principle Section describ es b onacci example a sync statement is required b efore the how the twoclone strategy is implemented and Section statement return xy to avoid the anomaly that would presents the THE proto col Section gives empirical evi o ccur if x and y are summed b efore they are computed In dence that the Cilk scheduler is ecient Finally Section addition to explicit synchronization provided by the sync presents related work and oers some conclusions statement every Cilk pro cedure syncs implicitly b efore it returns thus ensuring that all of its children terminate b e The Cilk language fore it do es Ordinarily when a spawned pro cedure returns the re This section presents a brief overview of the Cilk extensions turned value is simply stored into a variable in its parents to C as supp orted by Cilk For a complete description frame consult the Cilk manual The key features of the lan 1 This program uses an inecient algorithm which runs in exp onen guage are the sp ecication of parallelism and synchroniza tial time Although logarithmictime metho ds are known p tion through the spawn and sync keywords and the sp eci this program nevertheless provides a go o d didactic example cation of nondeterminism using inlet and abort cilk int fib int n ab out concurrency and nondeterminism without requiring lo cking declaration of critical regions and the like int x inlet void summer int result Cilk provides syntactic sugar to pro duce certain commonly used inlets implicitly For example the statement
Recommended publications
  • Other Apis What’S Wrong with Openmp?
    Threaded Programming Other APIs What’s wrong with OpenMP? • OpenMP is designed for programs where you want a fixed number of threads, and you always want the threads to be consuming CPU cycles. – cannot arbitrarily start/stop threads – cannot put threads to sleep and wake them up later • OpenMP is good for programs where each thread is doing (more-or-less) the same thing. • Although OpenMP supports C++, it’s not especially OO friendly – though it is gradually getting better. • OpenMP doesn’t support other popular base languages – e.g. Java, Python What’s wrong with OpenMP? (cont.) Can do this Can do this Can’t do this Threaded programming APIs • Essential features – a way to create threads – a way to wait for a thread to finish its work – a mechanism to support thread private data – some basic synchronisation methods – at least a mutex lock, or atomic operations • Optional features – support for tasks – more synchronisation methods – e.g. condition variables, barriers,... – higher levels of abstraction – e.g. parallel loops, reductions What are the alternatives? • POSIX threads • C++ threads • Intel TBB • Cilk • OpenCL • Java (not an exhaustive list!) POSIX threads • POSIX threads (or Pthreads) is a standard library for shared memory programming without directives. – Part of the ANSI/IEEE 1003.1 standard (1996) • Interface is a C library – no standard Fortran interface – can be used with C++, but not OO friendly • Widely available – even for Windows – typically installed as part of OS – code is pretty portable • Lots of low-level control over behaviour of threads • Lacks a proper memory consistency model Thread forking #include <pthread.h> int pthread_create( pthread_t *thread, const pthread_attr_t *attr, void*(*start_routine, void*), void *arg) • Creates a new thread: – first argument returns a pointer to a thread descriptor.
    [Show full text]
  • 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.
    [Show full text]
  • Correct and Efficient Work-Stealing for Weak Memory Models
    Correct and Efficient Work-Stealing for Weak Memory Models Nhat Minh Lê Antoniu Pop Albert Cohen Francesco Zappa Nardelli INRIA and ENS Paris Abstract Lev’s deque for the ARM architectures, and prove its correctness Chase and Lev’s concurrent deque is a key data structure in shared- against the memory semantics defined in [12] and [7]. Our second memory parallel programming and plays an essential role in work- contribution is a systematic study of the performance of several stealing schedulers. We provide the first correctness proof of an implementations of Chase–Lev on relaxed hardware. In detail, we optimized implementation of Chase and Lev’s deque on top of the compare our optimized ARM implementation against a standard POWER and ARM architectures: these provide very relaxed mem- implementation for the x86 architecture and two portable variants ory models, which we exploit to improve performance but consider- expressed in C11: a reference sequentially consistent translation ably complicate the reasoning. We also study an optimized x86 and of the algorithm, and an aggressively optimized version making a portable C11 implementation, conducting systematic experiments full use of the release–acquire and relaxed semantics offered by to evaluate the impact of memory barrier optimizations. Our results C11 low-level atomics. These implementations of the Chase–Lev demonstrate the benefits of hand tuning the deque code when run- deque are evaluated in the context of a work-stealing scheduler. We ning on top of relaxed memory models. consider diverse worker/thief configurations, including a synthetic benchmark with two different workloads and standard task-parallel Categories and Subject Descriptors D.1.3 [Programming Tech- kernels.
    [Show full text]
  • Operating Systems and Applications for Embedded Systems >>> Toolchains
    >>> Operating Systems And Applications For Embedded Systems >>> Toolchains Name: Mariusz Naumowicz Date: 31 sierpnia 2018 [~]$ _ [1/19] >>> Plan 1. Toolchain Toolchain Main component of GNU toolchain C library Finding a toolchain 2. crosstool-NG crosstool-NG Installing Anatomy of a toolchain Information about cross-compiler Configruation Most interesting features Sysroot Other tools POSIX functions AP [~]$ _ [2/19] >>> Toolchain A toolchain is the set of tools that compiles source code into executables that can run on your target device, and includes a compiler, a linker, and run-time libraries. [1. Toolchain]$ _ [3/19] >>> Main component of GNU toolchain * Binutils: A set of binary utilities including the assembler, and the linker, ld. It is available at http://www.gnu.org/software/binutils/. * GNU Compiler Collection (GCC): These are the compilers for C and other languages which, depending on the version of GCC, include C++, Objective-C, Objective-C++, Java, Fortran, Ada, and Go. They all use a common back-end which produces assembler code which is fed to the GNU assembler. It is available at http://gcc.gnu.org/. * C library: A standardized API based on the POSIX specification which is the principle interface to the operating system kernel from applications. There are several C libraries to consider, see the following section. [1. Toolchain]$ _ [4/19] >>> C library * glibc: Available at http://www.gnu.org/software/libc. It is the standard GNU C library. It is big and, until recently, not very configurable, but it is the most complete implementation of the POSIX API. * eglibc: Available at http://www.eglibc.org/home.
    [Show full text]
  • Concurrent Cilk: Lazy Promotion from Tasks to Threads in C/C++
    Concurrent Cilk: Lazy Promotion from Tasks to Threads in C/C++ Christopher S. Zakian, Timothy A. K. Zakian Abhishek Kulkarni, Buddhika Chamith, and Ryan R. Newton Indiana University - Bloomington, fczakian, tzakian, adkulkar, budkahaw, [email protected] Abstract. Library and language support for scheduling non-blocking tasks has greatly improved, as have lightweight (user) threading packages. How- ever, there is a significant gap between the two developments. In previous work|and in today's software packages|lightweight thread creation incurs much larger overheads than tasking libraries, even on tasks that end up never blocking. This limitation can be removed. To that end, we describe an extension to the Intel Cilk Plus runtime system, Concurrent Cilk, where tasks are lazily promoted to threads. Concurrent Cilk removes the overhead of thread creation on threads which end up calling no blocking operations, and is the first system to do so for C/C++ with legacy support (standard calling conventions and stack representations). We demonstrate that Concurrent Cilk adds negligible overhead to existing Cilk programs, while its promoted threads remain more efficient than OS threads in terms of context-switch overhead and blocking communication. Further, it enables development of blocking data structures that create non-fork-join dependence graphs|which can expose more parallelism, and better supports data-driven computations waiting on results from remote devices. 1 Introduction Both task-parallelism [1, 11, 13, 15] and lightweight threading [20] libraries have become popular for different kinds of applications. The key difference between a task and a thread is that threads may block|for example when performing IO|and then resume again.
    [Show full text]
  • Map, Reduce and Mapreduce, the Skeleton Way$
    View metadata, citation and similar papers at core.ac.uk brought to you by CORE provided by Elsevier - Publisher Connector Procedia Computer Science ProcediaProcedia Computer Computer Science Science 00 1 (2010)(2012) 1–9 2095–2103 www.elsevier.com/locate/procedia International Conference on Computational Science, ICCS 2010 Map, Reduce and MapReduce, the skeleton way$ D. Buonoa, M. Daneluttoa, S. Lamettia aDept. of Computer Science, Univ. of Pisa, Italy Abstract Composition of Map and Reduce algorithmic skeletons have been widely studied at the end of the last century and it has demonstrated effective on a wide class of problems. We recall the theoretical results motivating the intro- duction of these skeletons, then we discuss an experiment implementing three algorithmic skeletons, a map,areduce and an optimized composition of a map followed by a reduce skeleton (map+reduce). The map+reduce skeleton implemented computes the same kind of problems computed by Google MapReduce, but the data flow through the skeleton is streamed rather than relying on already distributed (and possibly quite large) data items. We discuss the implementation of the three skeletons on top of ProActive/GCM in the MareMare prototype and we present some experimental obtained on a COTS cluster. ⃝c 2012 Published by Elsevier Ltd. Open access under CC BY-NC-ND license. Keywords: Algorithmic skeletons, map, reduce, list theory, homomorphisms 1. Introduction Algorithmic skeletons have been around since Murray Cole’s PhD thesis [1]. An algorithmic skeleton is a paramet- ric, reusable, efficient and composable programming construct that exploits a well know, efficient parallelism exploita- tion pattern. A skeleton programmer may build parallel applications simply picking up a (composition of) skeleton from the skeleton library available, providing the required parameters and running some kind of compiler+run time library tool specific of the target architecture at hand [2].
    [Show full text]
  • Parallelism in Cilk Plus
    Cilk Plus: Language Support for Thread and Vector Parallelism Arch D. Robison Intel Sr. Principal Engineer Outline Motivation for Intel® Cilk Plus SIMD notations Fork-Join notations Karatsuba multiplication example GCC branch Copyright© 2012, Intel Corporation. All rights reserved. 2 *Other brands and names are the property of their respective owners. Multi-Threading and Vectorization are Essential to Performance Latest Intel® Xeon® chip: 8 cores 2 independent threads per core 8-lane (single prec.) vector unit per thread = 128-fold potential for single socket Intel® Many Integrated Core Architecture >50 cores (KNC) ? independent threads per core 16-lane (single prec.) vector unit per thread = parallel heaven Copyright© 2012, Intel Corporation. All rights reserved. 3 *Other brands and names are the property of their respective owners. Importance of Abstraction Software outlives hardware. Recompiling is easier than rewriting. Coding too closely to hardware du jour makes moving to new hardware expensive. C++ philosophy: abstraction with minimal penalty Do not expect compiler to be clever. But let it do tedious bookkeeping. Copyright© 2012, Intel Corporation. All rights reserved. 4 *Other brands and names are the property of their respective owners. “Three Layer Cake” Abstraction Message Passing exploit multiple nodes Fork-Join exploit multiple cores exploit parallelism at multiple algorithmic levels SIMD exploit vector hardware Copyright© 2012, Intel Corporation. All rights reserved. 5 *Other brands and names are the property of their respective owners. Composition Message Driven compose via send/receive Fork-Join compose via call/return SIMD compose sequentially Copyright© 2012, Intel Corporation. All rights reserved. 6 *Other brands and names are the property of their respective owners.
    [Show full text]
  • Author Guidelines for 8
    ACCELERATED CODE GENERATOR FOR PROCESSING OCEAN COLOR REMOTE SENSING DATA ON GPU Jae-Moo Heo1, Gangwon Jo2, Hee-Jeong Han1, Hyun Yang 1 1Korea Ocean Satellite Center, Korea Institute of Ocean Science and Technology, Pusan, South Korea 2Seoul National University and ManyCoreSoft Co., Ltd., Seoul, South Korea ABSTRACT GOCI-II ground system in July 2017 and decided to process As the satellite data gradually increases, the processing time algorithms on the Graphics Processing Unit (GPU) in order of the algorithm for remote sensing also increases. It is now to process large amounts of data. essential to make efforts to improve the processing Nowadays, we can take advantage of computation devices performance in various accelerators such as Graphics of various architectures: Many Integrated Core (i.e., Intel Processing Unit (GPU). However, it is very difficult to use Xeon Phi), GPU, and Filed Programmable Gate Array programming models that make programs to run on (FPGA). These accelerators are constantly improving and accelerators. Especially for scientists, easy programming changing. And, parallel programming models that are and performance are often more important than providing compatible with these various accelerators are being many optimization functions and directives. To meet these developed at the same time. However, algorithm source requirements, we developed the accelerated code generator codes have been generally improved for several years or based on Open Computing Language (OpenCL) for several decades and it is not easy to develop a large amount processing ocean color remote sensing data. We easily of these source codes into the existing parallel programming applied our generator to atmospheric correction program for models.
    [Show full text]
  • A CPU/GPU Task-Parallel Runtime with Explicit Epoch Synchronization
    TREES: A CPU/GPU Task-Parallel Runtime with Explicit Epoch Synchronization Blake A. Hechtman, Andrew D. Hilton, and Daniel J. Sorin Department of Electrical and Computer Engineering Duke University Abstract —We have developed a task-parallel runtime targeting CPUs are a poor fit for GPUs. To understand system, called TREES, that is designed for high why this mismatch exists, we must first understand the performance on CPU/GPU platforms. On platforms performance of an idealized task-parallel application with multiple CPUs, Cilk’s “work-first” principle (with no runtime) and then how the runtime’s overhead underlies how task-parallel applications can achieve affects it. The performance of a task-parallel application performance, but work-first is a poor fit for GPUs. We is a function of two characteristics: its total amount of build upon work-first to create the “work-together” work to be performed (T1, the time to execute on 1 principle that addresses the specific strengths and processor) and its critical path (T∞, the time to execute weaknesses of GPUs. The work-together principle on an infinite number of processors). Prior work has extends work-first by stating that (a) the overhead on shown that the runtime of a system with P processors, the critical path should be paid by the entire system at TP, is bounded by = ( ) + ( ) due to the once and (b) work overheads should be paid co- greedy o ff line scheduler bound [3][10]. operatively. We have implemented the TREES runtime A task-parallel runtime introduces overheads and, for in OpenCL, and we experimentally evaluate TREES purposes of performance analysis, we distinguish applications on a CPU/GPU platform.
    [Show full text]
  • From Sequential to Parallel Programming with Patterns
    From sequential to parallel programming with patterns Inverted CERN School of Computing 2018 Plácido Fernández [email protected] 07 Mar 2018 Table of Contents Introduction Sequential vs Parallel patterns Patterns Data parallel vs streaming patterns Control patterns (sequential and parallel Streaming parallel patterns Composing parallel patterns Using the patterns Real world use case GrPPI with NUMA Conclusions Acknowledgements and references 07 Mar 2018 3 Table of Contents Introduction Sequential vs Parallel patterns Patterns Data parallel vs streaming patterns Control patterns (sequential and parallel Streaming parallel patterns Composing parallel patterns Using the patterns Real world use case GrPPI with NUMA Conclusions Acknowledgements and references 07 Mar 2018 4 Source: Herb Sutter in Dr. Dobb’s Journal Parallel hardware history I Before ~2005, processor manufacturers increased clock speed. I Then we hit the power and memory wall, which limits the frequency at which processors can run (without melting). I Manufacturers response was to continue improving their chips performance by adding more parallelism. To fully exploit modern processors capabilities, programmers need to put effort into the source code. 07 Mar 2018 6 Parallel Hardware Processors are naturally parallel: Programmers have plenty of options: I Caches I Multi-threading I Different processing units (floating I SIMD / Vectorization (Single point, arithmetic logic...) Instruction Multiple Data) I Integrated GPU I Heterogeneous hardware 07 Mar 2018 7 Source: top500.org Source: Intel Source: CERN Parallel hardware Xeon Xeon 5100 Xeon 5500 Sandy Bridge Haswell Broadwell Skylake Year 2005 2006 2009 2012 2015 2016 2017 Cores 1 2 4 8 18 24 28 Threads 2 2 8 16 36 48 56 SIMD Width 128 128 128 256 256 256 512 Figure: Intel Xeon processors evolution 0Source: ark.intel.com 07 Mar 2018 11 Parallel considerations When designing parallel algorithms where are interested in speedup.
    [Show full text]
  • Opencl: a Hands-On Introduction
    OpenCL: A Hands-on Introduction Tim Mattson Alice Koniges Intel Corp. Berkeley Lab/NERSC Simon McIntosh-Smith University of Bristol Acknowledgements: In addition to Tim, Alice and Simon … Tom Deakin (Bristol) and Ben Gaster (Qualcomm) contributed to this content. Agenda Lectures Exercises An Introduction to OpenCL Logging in and running the Vadd program Understanding Host programs Chaining Vadd kernels together Kernel programs The D = A + B + C problem Writing Kernel Programs Matrix Multiplication Lunch Working with the OpenCL memory model Several ways to Optimize matrix multiplication High Performance OpenCL Matrix multiplication optimization contest The OpenCL Zoo Run your OpenCL programs on a variety of systems. Closing Comments Course materials In addition to these slides, C++ API header files, a set of exercises, and solutions, we provide: OpenCL C 1.2 Reference Card OpenCL C++ 1.2 Reference Card These cards will help you keep track of the API as you do the exercises: https://www.khronos.org/files/ opencl-1-2-quick-reference-card.pdf The v1.2 spec is also very readable and recommended to have on-hand: https://www.khronos.org/registry/ cl/specs/opencl-1.2.pdf AN INTRODUCTION TO OPENCL Industry Standards for Programming Heterogeneous Platforms GPUs CPUs Emerging Increasingly general Multiple cores driving Intersection purpose data-parallel performance increases computing Graphics Multi- Heterogeneous APIs and processor Computing Shading programming – Languages e.g. OpenMP OpenCL – Open Computing Language Open, royalty-free standard for portable, parallel programming of heterogeneous parallel computing CPUs, GPUs, and other processors The origins of OpenCL ARM AMD Merged, needed Nokia commonality IBM ATI across products Sony Wrote a rough draft Qualcomm GPU vendor – straw man API Imagination wants to steal TI NVIDIA market share from CPU + many more Khronos Compute CPU vendor – group formed wants to steal Intel market share from GPU Was tired of recoding for many core, GPUs.
    [Show full text]
  • An Efficient Work-Stealing Scheduler for Task Dependency Graph
    2020 IEEE 26th International Conference on Parallel and Distributed Systems (ICPADS) An Efficient Work-Stealing Scheduler for Task Dependency Graph Chun-Xun Lin Tsung-Wei Huang Martin D. F. Wong Department of Electrical Department of Electrical Department of Electrical and Computer Engineering, and Computer Engineering, and Computer Engineering, University of Illinois Urbana-Champaign, The University of Utah, University of Illinois Urbana-Champaign, Urbana, IL, USA Salt Lake City, Utah Urbana, IL, USA [email protected] [email protected] [email protected] Abstract—Work-stealing is a key component of many parallel stealing scheduler is not an easy job, especially when dealing task graph libraries such as Intel Threading Building Blocks with task dependency graph where the parallelism could be (TBB) FlowGraph, Microsoft Task Parallel Library (TPL) very irregular and unstructured. Due to the decentralized ar- Batch.Net, Cpp-Taskflow, and Nabbit. However, designing a correct and effective work-stealing scheduler is a notoriously chitecture, developers have to sort out many implementation difficult job, due to subtle implementation details of concur- details to efficiently manage workers such as deciding the rency controls and decentralized coordination between threads. number of steals attempted by a thief and how to mitigate This problem becomes even more challenging when striving the resource contention between workers. The problem is for optimal thread usage in handling parallel workloads even more challenging when considering throughput and with complex task graphs. As a result, we introduce in this paper an effective work-stealing scheduler for execution of energy efficiency, which have emerged as critical issues in task dependency graphs.
    [Show full text]