505:, the market for Cilk was restricted to high-performance computing. The emergence of multicore processors in mainstream computing meant that hundreds of millions of new parallel computers were being shipped every year. Cilk Arts was formed to capitalize on that opportunity: in 2006, Leiserson launched Cilk Arts to create and bring to market a modern version of Cilk that supports the commercial needs of an upcoming generation of programmers. The company closed a Series A venture financing round in October 2007, and its product, Cilk++ 1.0, shipped in December, 2008.
4540:
3535:
541:. Cilk Plus adopts simplifications, proposed by Cilk Arts in Cilk++, to eliminate the need for several of the original Cilk keywords while adding the ability to spawn functions and to deal with variables involved in reduction operations. Cilk Plus differs from Cilk and Cilk++ by adding array extensions, being incorporated in a commercial compiler (from Intel), and compatibility with existing debuggers.
2465:'s state, including its variables and where the code suspended execution, and put that state on the stack. It will not take a suspended state off the stack and resume execution until the procedure call that caused the suspension, and any procedures called in turn by that procedure, have all been fully executed.
2406:
This notation helps the compiler to effectively vectorize the application. Intel Cilk Plus allows C/C++ operations to be applied to multiple array elements in parallel, and also provides a set of built-in functions that can be used to perform vectorized shifts, rotates, and reductions. Similar
999:(The preceding description is not entirely accurate. Even though the common terminology for discussing Cilk refers to processors making the decision to spawn off work to other processors, it is actually the scheduler which assigns procedures to processors for execution, using a policy called
2476:
stack from the same end that it puts them on; however, any processor which is not currently working (having finished its own work, or not yet having been assigned any) will pick another processor at random, through the scheduler, and try to "steal" work from the opposite end of their
619:
After Cilk Plus support was deprecated by Intel, MIT has taken on the development of Cilk in the OpenCilk implementation, focusing on the LLVM/Clang fork now termed "Tapir". OpenCilk remains largely compatible with Intel Cilk Plus. Its first stable version was released in March 2021.
610:
In May, 2017, GCC 7.1 was released and marked Cilk Plus support as deprecated. Intel itself announced in
September 2017 that they would deprecate Cilk Plus with the 2018 release of the Intel Software Development Tools. In May 2018, GCC 8.1 was released with Cilk Plus support removed.
1902:
The reasons for generating a divide-and-conquer program rather than the obvious alternative, a loop that spawn-calls the loop body as a function, lie in both the grainsize handling and in efficiency: doing all the spawning in a single task makes load balancing a bottleneck.
1583:: any sub-array of one hundred or fewer elements is processed sequentially. Although the Cilk specification does not specify the exact behavior of the construct, the typical implementation is a divide-and-conquer recursion, as if the programmer had written
1399:
The alternative is to use an inlet. An inlet is a function internal to a Cilk procedure which handles the results of a spawned procedure call as they return. One major reason to use inlets is that all the inlets of a procedure are guaranteed to operate
1388:. Ordinarily, when a Cilk procedure is spawned, it can return its results to the parent procedure only by putting those results in a variable in the parent's frame, as we assigned the results of our spawned procedure calls in the example to
2445:
The Cilk scheduler uses a policy called "work-stealing" to divide procedure execution efficiently among multiple processors. Again, it is easiest to understand if we look first at how Cilk code is executed on a single-processor machine.
536:
began redirecting to the Intel website (as of early 2017, the original Cilk website no longer resolves to a host). Intel and Cilk Arts integrated and advanced the technology further resulting in a
September 2010 release of Intel
636:, to decide during execution how to actually divide the work between processors. It is because these responsibilities are separated that a Cilk program can run without rewriting on any number of processors, including one.
995:
itself, as it would if it were the only processor. Of course, if another processor is available, then it will be called into service, and all three processors would be executing separate frames simultaneously.
2477:
stack – suspended states, which the stealing processor can then begin to execute. The states which get stolen are the states that the processor stolen from would get around to executing last.
1404:
with regards to each other and to the parent procedure, thus avoiding the bugs that could occur if the multiple returning procedures tried to update the same variables in the parent frame at the same time.
490:
A showcase for Cilk's capabilities was the
Cilkchess parallel chess-playing program, which won several computer chess prizes in the 1990s, including the 1996 Open Dutch Computer Chess Championship.
426:, which increased compatibility with existing C and C++ code, calling the result Cilk Plus. After Intel stopped supporting Cilk Plus in 2017, MIT is again developing Cilk in the form of OpenCilk.
1934:
and without using explicit locks. Each strand has a view on the hyperobject that it can use and update; when the strands synchronize, the views are combined in a way specified by the programmer.
476:) of the full Cilk program, with the same semantics as the Cilk program running on a single processor. Despite several similarities, Cilk is not directly related to AT&T Bell Labs'
468:, with the addition of Cilk-specific keywords to signal parallelism. When the Cilk keywords are removed from Cilk source code, the result should always be a valid C program, called the
2419:
In Cilk Plus, an elemental function is a regular function which can be invoked either on scalar arguments or on array elements in parallel. They are similar to the kernel functions of
1026:
keyword, which we see in line 11: it tells the processor executing a frame that it must suspend its own execution until all the procedure calls it has spawned off have returned. When
2468:
With multiple processors, things of course change. Each processor still has a stack for storing frames whose execution has been suspended; however, these stacks are more like
2912:
2431:
This pragma gives the compiler permission to vectorize a loop even in cases where auto-vectorization might fail. It is the simplest way to manually apply vectorization.
2689:
1420:
keyword can only be used inside an inlet; it tells the scheduler that any other procedures that have been spawned off by the parent procedure can safely be aborted.
1910:
construct to be quite general, but noted that the Cilk Plus specification did not stipulate that its iterations need to be data-independent, so a compiler cannot
4575:
3866:
979:
at the same time. A processor is not obligated to assign a spawned procedure elsewhere; if the machine only has two processors and the second is still busy on
677:
statement indicates that execution of the current function cannot proceed until all previously spawned function calls have completed. This is an example of a
2708:
487:(GCC). The last version, Cilk 5.4.6, is available from the MIT Computer Science and Artificial Intelligence Laboratory (CSAIL), but is no longer supported.
2881:
724:
keyword, which is gone as of Cilk Plus. (Cilk program code is not numbered; the numbers have been added only to make the discussion easier to follow.)
594:, which identifies a function which is written in Cilk. Since Cilk procedures can call C procedures directly, but C procedures cannot directly call or
1053:
The code example above uses the syntax of Cilk-5. The original Cilk (Cilk-1) used a rather different syntax that required programming in an explicit
632:
the parallelism, identifying elements that can safely be executed in parallel; it should then be left to the run-time environment, particularly the
3062:
4585:
477:
3956:
3808:
1580:
1010:
were to execute line 13 before both of the other processors had completed their frames, it would generate an incorrect result or an error;
457:
In April 1994 the three projects were combined and christened "Cilk". The name Cilk is not an acronym, but an allusion to "nice threads" (
3034:
2930:
4565:
512: – a new construct designed to solve data race problems created by parallel accesses to global variables. Cilk++ was
3573:
2594:
2531:
2069:
598:
Cilk procedures, this keyword is needed to distinguish Cilk code from C code. Cilk Plus removes this restriction, as well as the
129:
4570:
3937:
2902:
Blumofe, Robert D.; Joerg, Christopher F.; Kuszmaul, Bradley C.; Leiserson, Charles E.; Randall, Keith H.; Zhou, Yuli (1995).
2828:
415:
65:
3977:
4204:
3055:
2686:
2261:
386:
4227:
2076:
point out that even the sum reducer can result in non-deterministic behavior, showing a program that may produce either
967:
tells the processor that it can safely give the job to a second processor: this second processor can create a frame for
4116:
3375:
3972:
666:) can safely run in parallel with the statements following it in the calling function. Note that the scheduler is not
4222:
4199:
3662:
3539:
422:, Cilk was later commercialized as Cilk++ by a spinoff company, Cilk Arts. That company was subsequently acquired by
3801:
2617:
3024:
2705:
4194:
4009:
3356:
3265:
3048:
920:. On line 8, the processor would have to suspend the current frame, create a new frame to execute the procedure
4301:
4215:
4164:
3474:
3030:
2497:
528:
On July 31, 2009, Cilk Arts announced on its web site that its products and engineering team were now part of
439:
The Cilk programming language grew out of three separate projects at the MIT Laboratory for
Computer Science:
4525:
4359:
4210:
3897:
2472:, in that suspended states can be removed from either end. A processor can still only remove states from its
2453:
on which it places each frame that it has to suspend in order to handle a procedure call. If it is executing
2873:
3566:
3494:
3446:
2491:
4544:
4490:
3950:
3794:
3504:
3489:
3195:
2503:
564:
323:
209:
162:
4469:
4264:
4149:
4111:
3961:
3851:
3451:
3180:
2766:
2411:; Cilk Plus differs in that it never allocates temporary arrays, so memory usage is easier to predict.
1556:
1054:
678:
912:, and execute lines 1 through 5. On line 6, it would create spaces in the frame to hold the values of
628:
The principle behind the design of the Cilk language is that the programmer should be responsible for
4485:
4464:
4409:
4296:
4286:
4259:
4121:
3697:
3674:
3499:
3205:
3102:
3097:
3092:
2984:
2536:
1401:
579:
393:
17:
2571:
1918:
loop. The review also noted the fact that reductions (e.g., sums over arrays) need additional code.
4439:
4065:
4004:
3917:
3479:
3190:
3138:
3071:
400:
146:
3019:
567:
with Cilk Plus support. The Intel
Compiler, but not the open source implementations, comes with a
362:
4580:
4500:
4495:
4354:
3945:
3559:
3342:
3317:
1911:
1576:
553:
453:
PCM/Threaded-C – a C-based package for scheduling continuation-passing-style threads on the CM-5
4239:
4171:
4075:
3967:
3922:
3691:
3656:
3618:
3360:
3302:
2566:
2486:
1937:
The most common type of hyperobject is a reducer, which corresponds to the reduction clause in
650:
Cilk's main addition to C are two keywords that together allow writing task-parallel programs.
633:
517:
49:
45:
41:
4331:
4291:
4244:
4234:
4029:
3892:
3831:
3608:
2511:
1950:
670:
to run this procedure in parallel; the keyword merely alerts the scheduler that it can do so.
2724:
4271:
4159:
4154:
4144:
4131:
3927:
3752:
3734:
3613:
3322:
545:
513:
419:
407:
programming languages, which they extend with constructs to express parallel loops and the
389:
53:
36:
8:
4434:
4389:
4189:
4055:
3668:
3337:
3332:
3294:
3185:
645:
408:
955:
machine, however, execution proceeds differently. One processor starts the execution of
924:, execute the code of that frame until reaching a return statement, and then resume the
4459:
4308:
4281:
4106:
4070:
4060:
4019:
3861:
3841:
3836:
3817:
3403:
3168:
3133:
2542:
2526:
720:
keywords. The original Cilk required any function using these to be annotated with the
516:. Like its predecessor, it was implemented as a Cilk-to-C++ compiler. It supported the
396:
349:
301:
187:
73:
461:) and the C programming language. The Cilk-1 compiler was released in September 1994.
4505:
4181:
4139:
4034:
3236:
3231:
3200:
3143:
2253:
595:
2972:. Proc. Annual Symposium on Parallelism in Algorithms and Architectures (SPAA). ACM.
2963:
Frigo, Matteo; Halpern, Pablo; Leiserson, Charles E.; Lewin-Berlin, Stephen (2009).
2903:
4515:
4314:
4249:
4096:
3912:
3907:
3902:
3871:
3729:
2665:
2576:
1946:
1384:
The two remaining Cilk keywords are slightly more advanced, and concern the use of
709:
574:
Intel later discontinued it, recommending its users switch to instead using either
251:
235:
2820:
548:
with the release of the Intel compiler in Intel
Composer XE 2010. An open source (
508:
Cilk++ differs from Cilk in several ways: support for C++, support for loops, and
450:
built to run on the
Thinking Machines Corporation's Connection Machine model CM-5.
4379:
4319:
4254:
4101:
4091:
4024:
4014:
3856:
3846:
3724:
3628:
3347:
3307:
3215:
2725:"Intel Cilk Plus: A quick, easy and reliable way to improve threaded performance"
2712:
2693:
2580:
291:
177:
106:
60:
4510:
4326:
3983:
3876:
3757:
3520:
3365:
3327:
3253:
3153:
2964:
1931:
1424:
Inlets were removed when Cilk became Cilk++, and are not present in Cilk Plus.
1022:, but one or both of those values would be missing. This is the purpose of the
975:'s frame when it finishes; the first processor continues executing the code of
568:
484:
447:
2706:"Parallel Studio 2011: Now We Know What Happened to Ct, Cilk++, and RapidMind"
4559:
4399:
4276:
3623:
3423:
3413:
3352:
2440:
2257:
602:
keyword, so C and C++ functions can call into Cilk Plus code and vice versa.
3999:
3393:
3158:
2736:
2561:
LaGrone, James; Aribuki, Ayodunni; Addison, Cody; Chapman, Barbara (2011).
1961:
operation computes a sum. This reducer is built into Cilk++ and Cilk Plus:
590:
In the original MIT Cilk implementation, the first Cilk keyword is in fact
4520:
3484:
3040:
2802:
2784:
2062:
905:
560:
keyword, which was added in GCC 5.0. In
February 2013, Intel announced a
549:
102:
98:
93:
2621:
712:
function in Cilk, with parallel recursive calls, which demonstrates the
3128:
3107:
2642:
2450:
2408:
1413:
keyword identifies a function defined within the procedure as an inlet.
936:
variable. On the next line, it would need to suspend again to execute
556:(GCC), which shipped Cilk Plus support in version 4.9, except for the
4394:
4369:
3786:
3773:
3634:
1954:
705:
538:
240:
2931:"Compilers and More: The Past, Present and Future of Parallel Loops"
4444:
4424:
4349:
3708:
3428:
3418:
3398:
3243:
3210:
3148:
2950:
Structured
Parallel Programming: Patterns for Efficient Computation
2983:
Burckhardt, Sebastian; Baldassin, Alexandro; Leijen, Daan (2010).
1906:
A review of various parallel loop constructs on HPCwire found the
4449:
4429:
4404:
4039:
3551:
3112:
2962:
1432:
Cilk++ added an additional construct, the parallel loop, denoted
4419:
4414:
3383:
3280:
3275:
3082:
3031:"Cilk Plus: Language Support for Thread and Vector Parallelism"
2993:
2599:
2521:
2420:
2068:
A limitation of hyperobjects is that they provide only limited
1942:
1938:
575:
465:
158:
2821:"Cilk Hub taking on Cilk development after Intel announcement"
2748:
1957:
of numbers: the identity element is zero, and the associative
3703:
3640:
3582:
3469:
3408:
3388:
3312:
3260:
3248:
2901:
2469:
1376:, effectively "returning" the value to the successor thread.
987:
gets to the procedure call, the first processor will suspend
561:
529:
423:
404:
244:
78:
2560:
4454:
4384:
3596:
are no longer maintained or have planned end-of-life dates.
3270:
2715:, Dr. Dobb's Journal (2010-09-02). Retrieved on 2010-09-14.
2516:
1050:, making it safe to perform calculations on those results.
458:
443:
Theoretical work on scheduling multi-threaded applications.
279:
265:
1360:
to be filled in by the recursive calls. The base case and
4364:
4341:
3087:
2986:
Concurrent
Programming with Revisions and Isolation Types
2982:
2739:, Free Software Foundation, Inc. Retrieved on 2014-06-29.
2737:"GCC 4.9 Release Series Changes, New Features, and Fixes"
483:
Cilk was implemented as a translator to C, targeting the
2948:
McCool, Michael; Reinders, James; Robison, Arch (2013).
2849:
2803:"GCC 8 Release Series. Changes, New Features, and Fixes"
2785:"GCC 7 Release Series. Changes, New Features, and Fixes"
2065:
or strings, and programmers can define custom reducers.
117:
3011:
2947:
2913:
Symp. Principles and Practice of Parallel Programming
1930:, that allow multiple strands to share state without
1575:
in an indeterminate order. The optional "grain size"
2252:
Intel Cilk Plus adds notation to express high-level
1953:
that combines two values. The archetypal reducer is
2874:"Release opencilk/v1.0 · OpenCilk/opencilk-project"
1966:// Compute ∑ foo(i) for i from 0 to N, in parallel.
639:
2565:. 7th Int'l Workshop on OpenMP. pp. 165–178.
552:) implementation was contributed by Intel to the
4557:
2696:, HPCwire (2010-09-02). Retrieved on 2010-09-14.
2905:Cilk: An Efficient Multithreaded Runtime System
1057:, and the Fibonacci examples looks as follows:
585:
4576:Massachusetts Institute of Technology software
2663:
509:
3802:
3567:
3056:
2760:
2758:
2756:
1368:operation to set their continuation variable
1034:statement in line 11, it can only be because
1921:
1559:idiom: the body of the loop, here a call to
1014:would be trying to add the values stored in
971:, execute its code, and store its result in
2687:"Intel Flexes Parallel Programming Muscles"
2666:"Programming parallel applications in Cilk"
2664:Leiserson, Charles E.; Plaat, Aske (1998).
2264:-style function that is ordinarily written
1042:have completed and placed their results in
928:frame with the value of fib(1) placed into
605:
3809:
3795:
3574:
3560:
3070:
3063:
3049:
2764:
2753:
2570:
658:keyword, when preceding a function call (
532:Corp. In early 2010, the Cilk website at
414:Originally developed in the 1990s at the
2924:
2922:
2605:The name rayon is a homage to that work.
2563:A Runtime Implementation of OpenMP Tasks
2061:Other reducers can be used to construct
701:if the Cilk Plus headers are included.)
685:(In Cilk Plus, the keywords are spelled
464:The original Cilk language was based on
1563:followed by an assignment to the array
959:; when it reaches line 8, however, the
544:Cilk Plus was first implemented in the
493:
14:
4558:
3816:
2966:Reducers and other Cilk++ hyperobjects
2414:
1926:Cilk++ added a kind of objects called
582:for their parallel programming needs.
4586:Programming languages created in 1994
3790:
3555:
3044:
3035:"Parallel Programming with Cilk Plus"
2928:
2919:
2767:"Intel Cilk Plus is being deprecated"
2532:Sieve C++ Parallel Programming System
2457:, and encounters a recursive call to
662:), indicates that the function call (
416:Massachusetts Institute of Technology
1436:in Cilk Plus. These loops look like
1333:keyword indicates the creation of a
900:processor to determine the value of
623:
2941:
2084:depending on the scheduling order:
24:
3581:
523:
25:
4597:
3663:Integrated Performance Primitives
3003:
2727:, Intel. Retrieved on 2010-09-14.
2400:can in Cilk Plus be expressed as
2247:
1660:// The 100 here is the grainsize.
1427:
1349:subroutine after waiting for the
215:2.0.1 / September 3, 2022
4566:Concurrent programming languages
4539:
4538:
3534:
3533:
2807:GCC, the GNU Compiler Collection
2789:GCC, the GNU Compiler Collection
2765:Hansang B. (20 September 2017).
2434:
1941:or to the algebraic notion of a
1567:, is executed for each value of
904:, that processor would create a
640:Task parallelism: spawn and sync
4010:Analysis of parallel algorithms
2976:
2956:
2929:Wolfe, Michael (6 April 2015).
2895:
2884:from the original on 2021-12-06
2866:
2842:
2831:from the original on 2018-06-12
2813:
2795:
2777:
2742:
2426:
1030:is allowed to proceed past the
951:When the code is executed on a
896:If this code was executed by a
329:1.2 / September 9, 2013
68:Laboratory for Computer Science
2730:
2718:
2699:
2680:
2657:
2635:
2610:
2587:
2554:
2498:Intel Parallel Building Blocks
1475:#pragma cilk grainsize = 100
963:keyword modifying the call to
13:
1:
4571:C programming language family
3957:Simultaneous and heterogenous
2548:
983:when the processor executing
499:
4545:Category: Parallel computing
2581:10.1007/978-3-642-21487-5_13
2492:Intel Concurrent Collections
586:Differences between versions
571:and a performance analyzer.
7:
3025:Cilk Project website at MIT
2645:. MIT CSAIL. 8 October 2010
2504:Intel Array Building Blocks
2480:
2254:operations on entire arrays
1006:If the processor executing
614:
434:
136:Cilk++, Cilk Plus, OpenCilk
10:
4602:
3852:High-performance computing
3447:Compatibility of C and C++
2618:""A Brief History of Cilk"
2449:The processor maintains a
2438:
1337:thread (as opposed to the
1055:continuation-passing style
643:
429:
277:
4534:
4486:Automatic parallelization
4478:
4340:
4180:
4130:
4122:Application checkpointing
4084:
4048:
3992:
3936:
3885:
3824:
3766:
3745:
3717:
3698:Threading Building Blocks
3684:
3675:Threading Building Blocks
3649:
3601:
3590:
3529:
3513:
3460:
3437:
3374:
3293:
3224:
3176:
3167:
3121:
3078:
3020:Intel's Cilk Plus website
2537:Threading Building Blocks
1922:Reducers and hyperobjects
1379:
358:
348:
344:
322:
318:
310:
300:
290:
260:
250:
234:
230:
208:
204:
196:
186:
176:
157:
152:
145:
140:
135:
128:
112:
92:
84:
72:
59:
35:
2407:functionality exists in
2266:
2086:
1963:
1585:
1438:
1059:
940:and place the result in
726:
606:Deprecation of Cilk Plus
399:. They are based on the
278:Not to be confused with
4501:Embarrassingly parallel
4496:Deterministic algorithm
2952:. Elsevier. p. 30.
1912:automatically vectorize
1329:'s recursive case, the
580:Intel's own TBB library
554:GNU Compiler Collection
4216:Associative processing
4172:Non-blocking algorithm
3978:Clustered multi-thread
3692:Data Analytics Library
3657:Data Analytics Library
3452:Comparison with Pascal
3072:C programming language
2487:Grand Central Dispatch
1945:. Each reducer has an
1351:continuation variables
1345:), which executes the
708:implementation of the
446:StarTech – a parallel
418:(MIT) in the group of
331:; 11 years ago
4332:Hardware acceleration
4245:Superscalar processor
4235:Dataflow architecture
3832:Distributed computing
2771:Intel Cilk Plus forum
2512:Intel Parallel Studio
1951:associative operation
390:programming languages
217:; 2 years ago
4211:Pipelined processing
4160:Explicit parallelism
4155:Implicit parallelism
4145:Dataflow programming
3725:Telekinesys Research
2911:. Proc. ACM SIGPLAN
1555:This implements the
1003:, described later.)
514:proprietary software
494:Cilk Arts and Cilk++
420:Charles E. Leiserson
363:http://cilkplus.org/
27:Programming language
4435:Parallel Extensions
4240:Pipelined processor
3669:Math Kernel Library
2915:. pp. 207–216.
2415:Elemental functions
1366:send_argument(k, n)
1341:threads created by
520:and GNU compilers.
350:Filename extensions
311:First appeared
287:
197:First appeared
173:
85:First appeared
32:
4309:Massively parallel
4287:distributed shared
4107:Cache invalidation
4071:Instruction window
3862:Manycore processor
3842:Massively parallel
3837:Parallel computing
3818:Parallel computing
2711:2010-09-26 at the
2692:2010-09-06 at the
2643:"The Cilk Project"
2543:Unified Parallel C
2527:Parallel computing
2258:sections of arrays
546:Intel C++ Compiler
397:parallel computing
354:(Same as C or C++)
285:
171:
30:
4553:
4552:
4506:Parallel slowdown
4140:Stream processing
4030:Karp–Flatt metric
3784:
3783:
3718:Software programs
3549:
3548:
3289:
3288:
3029:Arch D. Robison,
624:Language features
368:
367:
276:
275:
169:
168:
94:Typing discipline
16:(Redirected from
4593:
4542:
4541:
4516:Software lockout
4315:Computer cluster
4250:Vector processor
4205:Array processing
4190:Flynn's taxonomy
4097:Memory coherence
3872:Computer network
3811:
3804:
3797:
3788:
3787:
3777:
3619:Fortran Compiler
3576:
3569:
3562:
3553:
3552:
3537:
3536:
3174:
3173:
3169:Standard library
3065:
3058:
3051:
3042:
3041:
3037:, July 16, 2012.
3015:
3014:
3012:Official website
2998:
2997:
2991:
2980:
2974:
2973:
2971:
2960:
2954:
2953:
2945:
2939:
2938:
2926:
2917:
2916:
2910:
2899:
2893:
2892:
2890:
2889:
2870:
2864:
2863:
2861:
2860:
2846:
2840:
2839:
2837:
2836:
2817:
2811:
2810:
2799:
2793:
2792:
2781:
2775:
2774:
2762:
2751:
2746:
2740:
2734:
2728:
2722:
2716:
2703:
2697:
2684:
2678:
2677:
2661:
2655:
2654:
2652:
2650:
2639:
2633:
2632:
2630:
2629:
2620:. Archived from
2614:
2608:
2607:
2591:
2585:
2584:
2574:
2558:
2403:y += alpha * x;
2396:
2393:
2390:
2387:
2384:
2381:
2378:
2375:
2372:
2369:
2366:
2363:
2360:
2357:
2354:
2351:
2348:
2345:
2342:
2339:
2336:
2333:
2330:
2327:
2324:
2321:
2318:
2315:
2312:
2309:
2306:
2303:
2300:
2297:
2294:
2291:
2288:
2285:
2282:
2279:
2276:
2273:
2270:
2243:
2240:
2237:
2234:
2231:
2228:
2225:
2222:
2219:
2216:
2213:
2210:
2207:
2204:
2201:
2198:
2195:
2192:
2189:
2186:
2183:
2180:
2177:
2174:
2171:
2168:
2165:
2162:
2159:
2156:
2153:
2150:
2147:
2144:
2141:
2138:
2135:
2132:
2129:
2126:
2123:
2120:
2117:
2114:
2111:
2108:
2105:
2102:
2099:
2096:
2093:
2090:
2083:
2079:
2057:
2054:
2051:
2048:
2045:
2042:
2039:
2036:
2033:
2030:
2027:
2024:
2021:
2018:
2015:
2012:
2009:
2006:
2003:
2000:
1997:
1994:
1991:
1988:
1985:
1982:
1979:
1976:
1973:
1970:
1967:
1947:identity element
1917:
1909:
1898:
1895:
1892:
1889:
1886:
1883:
1880:
1877:
1874:
1871:
1868:
1865:
1862:
1859:
1856:
1853:
1850:
1847:
1844:
1841:
1838:
1835:
1832:
1829:
1826:
1823:
1820:
1817:
1814:
1811:
1808:
1805:
1802:
1799:
1796:
1793:
1790:
1787:
1784:
1781:
1778:
1775:
1772:
1769:
1766:
1763:
1760:
1757:
1754:
1751:
1748:
1745:
1742:
1739:
1736:
1733:
1730:
1727:
1724:
1721:
1718:
1715:
1712:
1709:
1706:
1703:
1700:
1697:
1694:
1691:
1688:
1685:
1682:
1679:
1676:
1673:
1670:
1667:
1664:
1661:
1658:
1655:
1652:
1649:
1646:
1643:
1640:
1637:
1634:
1631:
1628:
1625:
1622:
1619:
1616:
1613:
1610:
1607:
1604:
1601:
1598:
1595:
1592:
1589:
1574:
1570:
1566:
1562:
1551:
1548:
1545:
1542:
1539:
1536:
1533:
1530:
1527:
1526:
1523:
1520:
1517:
1514:
1511:
1508:
1505:
1502:
1499:
1496:
1493:
1490:
1487:
1484:
1480:
1479:
1476:
1472:
1469:
1466:
1463:
1460:
1457:
1454:
1451:
1448:
1445:
1442:
1435:
1419:
1412:
1395:
1391:
1375:
1372:to the value of
1371:
1367:
1363:
1359:
1355:
1348:
1344:
1332:
1328:
1321:
1318:
1315:
1312:
1309:
1306:
1303:
1300:
1297:
1294:
1291:
1288:
1285:
1282:
1279:
1276:
1273:
1270:
1267:
1264:
1261:
1258:
1255:
1252:
1249:
1246:
1243:
1240:
1237:
1234:
1231:
1228:
1225:
1222:
1219:
1216:
1213:
1210:
1207:
1204:
1201:
1198:
1195:
1192:
1189:
1186:
1183:
1180:
1177:
1174:
1171:
1168:
1165:
1162:
1159:
1156:
1153:
1150:
1147:
1144:
1141:
1138:
1135:
1132:
1129:
1126:
1123:
1120:
1117:
1114:
1111:
1108:
1105:
1102:
1099:
1096:
1093:
1090:
1087:
1084:
1081:
1078:
1075:
1072:
1069:
1066:
1063:
1049:
1045:
1041:
1037:
1033:
1029:
1025:
1021:
1017:
1013:
1009:
994:
990:
986:
982:
978:
974:
970:
966:
962:
958:
947:
943:
939:
935:
931:
927:
923:
919:
915:
911:
903:
892:
889:
886:
883:
880:
877:
874:
871:
870:
867:
863:
862:
859:
856:
853:
850:
847:
844:
841:
838:
834:
833:
830:
827:
824:
821:
818:
815:
812:
809:
805:
802:
799:
796:
793:
790:
787:
784:
781:
778:
775:
772:
769:
766:
763:
760:
757:
754:
751:
748:
745:
742:
739:
736:
733:
730:
723:
719:
715:
700:
696:
692:
688:
676:
665:
661:
657:
601:
593:
559:
535:
504:
501:
339:
337:
332:
292:Designed by
288:
284:
272:
269:
267:
225:
223:
218:
178:Designed by
174:
170:
124:
121:
119:
61:Designed by
33:
29:
21:
4601:
4600:
4596:
4595:
4594:
4592:
4591:
4590:
4556:
4555:
4554:
4549:
4530:
4474:
4380:Coarray Fortran
4336:
4320:Beowulf cluster
4176:
4126:
4117:Synchronization
4102:Cache coherence
4092:Multiprocessing
4080:
4044:
4025:Cost efficiency
4020:Gustafson's law
3988:
3932:
3881:
3857:Multiprocessing
3847:Cloud computing
3820:
3815:
3785:
3780:
3770:
3762:
3741:
3713:
3680:
3645:
3609:Parallel Studio
3597:
3586:
3580:
3550:
3545:
3525:
3509:
3462:
3456:
3440:other languages
3439:
3438:Comparison with
3433:
3370:
3308:Borland Turbo C
3285:
3225:Implementations
3220:
3163:
3117:
3074:
3069:
3010:
3009:
3006:
3001:
2989:
2981:
2977:
2969:
2961:
2957:
2946:
2942:
2927:
2920:
2908:
2900:
2896:
2887:
2885:
2872:
2871:
2867:
2858:
2856:
2848:
2847:
2843:
2834:
2832:
2819:
2818:
2814:
2801:
2800:
2796:
2783:
2782:
2778:
2763:
2754:
2747:
2743:
2735:
2731:
2723:
2719:
2713:Wayback Machine
2704:
2700:
2694:Wayback Machine
2685:
2681:
2662:
2658:
2648:
2646:
2641:
2640:
2636:
2627:
2625:
2616:
2615:
2611:
2593:
2592:
2588:
2572:10.1.1.221.2775
2559:
2555:
2551:
2483:
2461:, it will save
2443:
2437:
2429:
2417:
2404:
2398:
2397:
2394:
2391:
2388:
2385:
2382:
2379:
2376:
2373:
2370:
2367:
2364:
2361:
2358:
2355:
2352:
2349:
2346:
2343:
2340:
2337:
2334:
2331:
2328:
2325:
2322:
2319:
2316:
2313:
2310:
2307:
2304:
2301:
2298:
2295:
2292:
2289:
2286:
2283:
2280:
2277:
2274:
2271:
2268:
2250:
2245:
2244:
2241:
2238:
2235:
2232:
2229:
2226:
2223:
2220:
2217:
2214:
2211:
2208:
2205:
2202:
2199:
2196:
2193:
2190:
2187:
2184:
2181:
2178:
2175:
2172:
2169:
2166:
2163:
2160:
2157:
2154:
2151:
2148:
2145:
2142:
2139:
2136:
2133:
2130:
2127:
2124:
2121:
2118:
2115:
2112:
2109:
2106:
2103:
2100:
2097:
2094:
2091:
2088:
2081:
2077:
2059:
2058:
2055:
2052:
2049:
2046:
2043:
2040:
2037:
2034:
2031:
2028:
2025:
2022:
2019:
2016:
2013:
2010:
2007:
2004:
2001:
1998:
1995:
1992:
1989:
1986:
1983:
1980:
1977:
1974:
1971:
1968:
1965:
1932:race conditions
1924:
1915:
1907:
1900:
1899:
1896:
1893:
1890:
1887:
1884:
1881:
1878:
1875:
1872:
1869:
1866:
1863:
1860:
1857:
1854:
1851:
1848:
1845:
1842:
1839:
1836:
1833:
1830:
1827:
1824:
1821:
1818:
1815:
1812:
1809:
1806:
1803:
1800:
1797:
1794:
1791:
1788:
1785:
1782:
1779:
1776:
1773:
1770:
1767:
1764:
1761:
1758:
1755:
1752:
1749:
1746:
1743:
1740:
1737:
1734:
1731:
1728:
1725:
1722:
1719:
1716:
1713:
1710:
1707:
1704:
1701:
1698:
1695:
1692:
1689:
1686:
1683:
1680:
1677:
1674:
1671:
1668:
1665:
1662:
1659:
1656:
1653:
1650:
1647:
1644:
1641:
1638:
1635:
1632:
1629:
1626:
1623:
1620:
1617:
1614:
1611:
1608:
1605:
1602:
1599:
1596:
1593:
1590:
1587:
1579:determines the
1572:
1568:
1564:
1560:
1553:
1552:
1549:
1546:
1543:
1540:
1537:
1534:
1531:
1528:
1524:
1521:
1518:
1515:
1512:
1509:
1506:
1503:
1500:
1497:
1494:
1491:
1488:
1485:
1482:
1481:
1477:
1474:
1473:
1470:
1467:
1464:
1461:
1458:
1455:
1452:
1449:
1446:
1443:
1440:
1433:
1430:
1417:
1410:
1393:
1389:
1382:
1373:
1369:
1365:
1361:
1357:
1353:
1346:
1342:
1330:
1326:
1323:
1322:
1319:
1316:
1313:
1310:
1307:
1304:
1301:
1298:
1295:
1292:
1289:
1286:
1283:
1280:
1277:
1274:
1271:
1268:
1265:
1262:
1259:
1256:
1253:
1250:
1247:
1244:
1241:
1238:
1235:
1232:
1229:
1226:
1223:
1220:
1217:
1214:
1211:
1208:
1205:
1202:
1199:
1196:
1193:
1190:
1187:
1184:
1181:
1178:
1175:
1172:
1169:
1166:
1163:
1160:
1157:
1154:
1151:
1148:
1145:
1142:
1139:
1136:
1133:
1130:
1127:
1124:
1121:
1118:
1115:
1112:
1109:
1106:
1103:
1100:
1097:
1094:
1091:
1088:
1085:
1082:
1079:
1076:
1073:
1070:
1067:
1064:
1061:
1047:
1043:
1039:
1035:
1031:
1027:
1023:
1019:
1015:
1011:
1007:
992:
988:
984:
980:
976:
972:
968:
964:
960:
956:
945:
941:
937:
933:
929:
925:
921:
917:
913:
909:
901:
894:
893:
890:
887:
884:
881:
878:
875:
872:
868:
865:
864:
860:
857:
854:
851:
848:
845:
842:
839:
836:
835:
831:
828:
825:
822:
819:
816:
813:
810:
807:
806:
803:
800:
797:
794:
791:
788:
785:
782:
779:
776:
773:
770:
767:
764:
761:
758:
755:
752:
749:
746:
743:
740:
737:
734:
731:
728:
721:
717:
713:
698:
694:
690:
686:
674:
663:
659:
655:
648:
646:Fork–join model
642:
626:
617:
608:
599:
591:
588:
557:
533:
526:
524:Intel Cilk Plus
502:
496:
437:
432:
409:fork–join idiom
387:general-purpose
340:
335:
333:
330:
283:
264:
226:
221:
219:
216:
116:
28:
23:
22:
15:
12:
11:
5:
4599:
4589:
4588:
4583:
4581:Intel software
4578:
4573:
4568:
4551:
4550:
4548:
4547:
4535:
4532:
4531:
4529:
4528:
4523:
4518:
4513:
4511:Race condition
4508:
4503:
4498:
4493:
4488:
4482:
4480:
4476:
4475:
4473:
4472:
4467:
4462:
4457:
4452:
4447:
4442:
4437:
4432:
4427:
4422:
4417:
4412:
4407:
4402:
4397:
4392:
4387:
4382:
4377:
4372:
4367:
4362:
4357:
4352:
4346:
4344:
4338:
4337:
4335:
4334:
4329:
4324:
4323:
4322:
4312:
4306:
4305:
4304:
4299:
4294:
4289:
4284:
4279:
4269:
4268:
4267:
4262:
4255:Multiprocessor
4252:
4247:
4242:
4237:
4232:
4231:
4230:
4225:
4220:
4219:
4218:
4213:
4208:
4197:
4186:
4184:
4178:
4177:
4175:
4174:
4169:
4168:
4167:
4162:
4157:
4147:
4142:
4136:
4134:
4128:
4127:
4125:
4124:
4119:
4114:
4109:
4104:
4099:
4094:
4088:
4086:
4082:
4081:
4079:
4078:
4073:
4068:
4063:
4058:
4052:
4050:
4046:
4045:
4043:
4042:
4037:
4032:
4027:
4022:
4017:
4012:
4007:
4002:
3996:
3994:
3990:
3989:
3987:
3986:
3984:Hardware scout
3981:
3975:
3970:
3965:
3959:
3954:
3948:
3942:
3940:
3938:Multithreading
3934:
3933:
3931:
3930:
3925:
3920:
3915:
3910:
3905:
3900:
3895:
3889:
3887:
3883:
3882:
3880:
3879:
3877:Systolic array
3874:
3869:
3864:
3859:
3854:
3849:
3844:
3839:
3834:
3828:
3826:
3822:
3821:
3814:
3813:
3806:
3799:
3791:
3782:
3781:
3779:
3778:
3767:
3764:
3763:
3761:
3760:
3755:
3753:Developer Zone
3749:
3747:
3743:
3742:
3740:
3739:
3738:
3737:
3732:
3721:
3719:
3715:
3714:
3712:
3711:
3706:
3701:
3695:
3688:
3686:
3682:
3681:
3679:
3678:
3672:
3666:
3660:
3653:
3651:
3647:
3646:
3644:
3643:
3638:
3631:
3626:
3621:
3616:
3611:
3605:
3603:
3599:
3598:
3591:
3588:
3587:
3579:
3578:
3571:
3564:
3556:
3547:
3546:
3544:
3543:
3530:
3527:
3526:
3524:
3523:
3521:Dennis Ritchie
3517:
3515:
3511:
3510:
3508:
3507:
3502:
3497:
3492:
3487:
3482:
3477:
3472:
3466:
3464:
3458:
3457:
3455:
3454:
3449:
3443:
3441:
3435:
3434:
3432:
3431:
3426:
3421:
3416:
3411:
3406:
3401:
3396:
3391:
3386:
3380:
3378:
3372:
3371:
3369:
3368:
3363:
3350:
3345:
3340:
3335:
3330:
3325:
3320:
3315:
3310:
3305:
3299:
3297:
3291:
3290:
3287:
3286:
3284:
3283:
3278:
3273:
3268:
3263:
3258:
3257:
3256:
3246:
3241:
3240:
3239:
3228:
3226:
3222:
3221:
3219:
3218:
3213:
3208:
3203:
3198:
3196:Dynamic memory
3193:
3188:
3183:
3177:
3171:
3165:
3164:
3162:
3161:
3156:
3151:
3146:
3141:
3136:
3131:
3125:
3123:
3119:
3118:
3116:
3115:
3110:
3105:
3100:
3095:
3090:
3085:
3079:
3076:
3075:
3068:
3067:
3060:
3053:
3045:
3039:
3038:
3027:
3022:
3017:
3005:
3004:External links
3002:
3000:
2999:
2975:
2955:
2940:
2918:
2894:
2880:. 2021-03-05.
2865:
2841:
2827:. 2017-12-01.
2812:
2794:
2776:
2752:
2749:Cilk Plus/LLVM
2741:
2729:
2717:
2698:
2679:
2656:
2634:
2609:
2586:
2552:
2550:
2547:
2546:
2545:
2540:
2534:
2529:
2524:
2519:
2514:
2509:
2508:
2507:
2495:
2489:
2482:
2479:
2439:Main article:
2436:
2433:
2428:
2425:
2416:
2413:
2402:
2269:// y ← α x + y
2267:
2249:
2248:Array notation
2246:
2087:
1964:
1923:
1920:
1586:
1439:
1429:
1428:Parallel loops
1426:
1422:
1421:
1414:
1381:
1378:
1060:
953:multiprocessor
727:
683:
682:
671:
641:
638:
625:
622:
616:
613:
607:
604:
587:
584:
525:
522:
495:
492:
485:GNU C Compiler
470:serial elision
455:
454:
451:
444:
436:
433:
431:
428:
366:
365:
360:
356:
355:
352:
346:
345:
342:
341:
328:
326:
324:Stable release
320:
319:
316:
315:
312:
308:
307:
304:
298:
297:
294:
274:
273:
262:
258:
257:
254:
248:
247:
238:
232:
231:
228:
227:
214:
212:
210:Stable release
206:
205:
202:
201:
198:
194:
193:
190:
184:
183:
180:
167:
166:
155:
154:
150:
149:
143:
142:
138:
137:
133:
132:
126:
125:
114:
110:
109:
96:
90:
89:
86:
82:
81:
76:
70:
69:
63:
57:
56:
39:
26:
9:
6:
4:
3:
2:
4598:
4587:
4584:
4582:
4579:
4577:
4574:
4572:
4569:
4567:
4564:
4563:
4561:
4546:
4537:
4536:
4533:
4527:
4524:
4522:
4519:
4517:
4514:
4512:
4509:
4507:
4504:
4502:
4499:
4497:
4494:
4492:
4489:
4487:
4484:
4483:
4481:
4477:
4471:
4468:
4466:
4463:
4461:
4458:
4456:
4453:
4451:
4448:
4446:
4443:
4441:
4438:
4436:
4433:
4431:
4428:
4426:
4423:
4421:
4418:
4416:
4413:
4411:
4408:
4406:
4403:
4401:
4400:Global Arrays
4398:
4396:
4393:
4391:
4388:
4386:
4383:
4381:
4378:
4376:
4373:
4371:
4368:
4366:
4363:
4361:
4358:
4356:
4353:
4351:
4348:
4347:
4345:
4343:
4339:
4333:
4330:
4328:
4327:Grid computer
4325:
4321:
4318:
4317:
4316:
4313:
4310:
4307:
4303:
4300:
4298:
4295:
4293:
4290:
4288:
4285:
4283:
4280:
4278:
4275:
4274:
4273:
4270:
4266:
4263:
4261:
4258:
4257:
4256:
4253:
4251:
4248:
4246:
4243:
4241:
4238:
4236:
4233:
4229:
4226:
4224:
4221:
4217:
4214:
4212:
4209:
4206:
4203:
4202:
4201:
4198:
4196:
4193:
4192:
4191:
4188:
4187:
4185:
4183:
4179:
4173:
4170:
4166:
4163:
4161:
4158:
4156:
4153:
4152:
4151:
4148:
4146:
4143:
4141:
4138:
4137:
4135:
4133:
4129:
4123:
4120:
4118:
4115:
4113:
4110:
4108:
4105:
4103:
4100:
4098:
4095:
4093:
4090:
4089:
4087:
4083:
4077:
4074:
4072:
4069:
4067:
4064:
4062:
4059:
4057:
4054:
4053:
4051:
4047:
4041:
4038:
4036:
4033:
4031:
4028:
4026:
4023:
4021:
4018:
4016:
4013:
4011:
4008:
4006:
4003:
4001:
3998:
3997:
3995:
3991:
3985:
3982:
3979:
3976:
3974:
3971:
3969:
3966:
3963:
3960:
3958:
3955:
3952:
3949:
3947:
3944:
3943:
3941:
3939:
3935:
3929:
3926:
3924:
3921:
3919:
3916:
3914:
3911:
3909:
3906:
3904:
3901:
3899:
3896:
3894:
3891:
3890:
3888:
3884:
3878:
3875:
3873:
3870:
3868:
3865:
3863:
3860:
3858:
3855:
3853:
3850:
3848:
3845:
3843:
3840:
3838:
3835:
3833:
3830:
3829:
3827:
3823:
3819:
3812:
3807:
3805:
3800:
3798:
3793:
3792:
3789:
3776:
3775:
3769:
3768:
3765:
3759:
3756:
3754:
3751:
3750:
3748:
3746:Organizations
3744:
3736:
3733:
3731:
3728:
3727:
3726:
3723:
3722:
3720:
3716:
3710:
3707:
3705:
3702:
3699:
3696:
3693:
3690:
3689:
3687:
3683:
3676:
3673:
3670:
3667:
3664:
3661:
3658:
3655:
3654:
3652:
3648:
3642:
3639:
3637:
3636:
3632:
3630:
3627:
3625:
3622:
3620:
3617:
3615:
3612:
3610:
3607:
3606:
3604:
3600:
3595:
3589:
3584:
3577:
3572:
3570:
3565:
3563:
3558:
3557:
3554:
3542:
3541:
3532:
3531:
3528:
3522:
3519:
3518:
3516:
3512:
3506:
3503:
3501:
3498:
3496:
3493:
3491:
3488:
3486:
3483:
3481:
3478:
3476:
3473:
3471:
3468:
3467:
3465:
3459:
3453:
3450:
3448:
3445:
3444:
3442:
3436:
3430:
3427:
3425:
3424:Visual Studio
3422:
3420:
3417:
3415:
3414:GNOME Builder
3412:
3410:
3407:
3405:
3402:
3400:
3397:
3395:
3392:
3390:
3387:
3385:
3382:
3381:
3379:
3377:
3373:
3367:
3364:
3362:
3358:
3354:
3353:Visual Studio
3351:
3349:
3346:
3344:
3341:
3339:
3336:
3334:
3331:
3329:
3326:
3324:
3321:
3319:
3316:
3314:
3311:
3309:
3306:
3304:
3301:
3300:
3298:
3296:
3292:
3282:
3279:
3277:
3274:
3272:
3269:
3267:
3264:
3262:
3259:
3255:
3252:
3251:
3250:
3247:
3245:
3242:
3238:
3235:
3234:
3233:
3230:
3229:
3227:
3223:
3217:
3214:
3212:
3209:
3207:
3204:
3202:
3199:
3197:
3194:
3192:
3189:
3187:
3184:
3182:
3179:
3178:
3175:
3172:
3170:
3166:
3160:
3157:
3155:
3152:
3150:
3147:
3145:
3142:
3140:
3137:
3135:
3132:
3130:
3127:
3126:
3124:
3120:
3114:
3111:
3109:
3106:
3104:
3101:
3099:
3096:
3094:
3091:
3089:
3086:
3084:
3081:
3080:
3077:
3073:
3066:
3061:
3059:
3054:
3052:
3047:
3046:
3043:
3036:
3032:
3028:
3026:
3023:
3021:
3018:
3013:
3008:
3007:
2995:
2988:
2987:
2979:
2968:
2967:
2959:
2951:
2944:
2936:
2932:
2925:
2923:
2914:
2907:
2906:
2898:
2883:
2879:
2875:
2869:
2855:
2851:
2845:
2830:
2826:
2822:
2816:
2808:
2804:
2798:
2790:
2786:
2780:
2772:
2768:
2761:
2759:
2757:
2750:
2745:
2738:
2733:
2726:
2721:
2714:
2710:
2707:
2702:
2695:
2691:
2688:
2683:
2675:
2671:
2667:
2660:
2644:
2638:
2624:on 2015-06-26
2623:
2619:
2613:
2606:
2602:
2601:
2596:
2590:
2582:
2578:
2573:
2568:
2564:
2557:
2553:
2544:
2541:
2538:
2535:
2533:
2530:
2528:
2525:
2523:
2520:
2518:
2515:
2513:
2510:
2505:
2502:
2501:
2499:
2496:
2493:
2490:
2488:
2485:
2484:
2478:
2475:
2471:
2466:
2464:
2460:
2456:
2452:
2447:
2442:
2441:Work stealing
2435:Work-stealing
2432:
2424:
2422:
2412:
2410:
2401:
2265:
2263:
2259:
2255:
2149:reducer_opadd
2104:reducer_opadd
2085:
2075:
2072:. Burckhardt
2071:
2066:
2064:
1975:reducer_opadd
1962:
1960:
1956:
1952:
1948:
1944:
1940:
1935:
1933:
1929:
1919:
1913:
1904:
1584:
1582:
1578:
1571:from zero to
1558:
1437:
1425:
1415:
1408:
1407:
1406:
1403:
1397:
1387:
1377:
1352:
1340:
1336:
1296:send_argument
1116:send_argument
1058:
1056:
1051:
1004:
1002:
1001:work-stealing
997:
954:
949:
907:
899:
725:
711:
707:
702:
680:
672:
669:
653:
652:
651:
647:
637:
635:
631:
621:
612:
603:
597:
583:
581:
577:
572:
570:
569:race detector
566:
563:
555:
551:
547:
542:
540:
531:
521:
519:
515:
511:
506:
491:
488:
486:
481:
479:
475:
471:
467:
462:
460:
452:
449:
448:chess program
445:
442:
441:
440:
427:
425:
421:
417:
412:
410:
406:
402:
398:
395:
394:multithreaded
392:designed for
391:
388:
384:
380:
376:
372:
364:
361:
357:
353:
351:
347:
343:
327:
325:
321:
317:
313:
309:
305:
303:
299:
295:
293:
289:
281:
271:
263:
259:
255:
253:
249:
246:
242:
239:
237:
233:
229:
213:
211:
207:
203:
199:
195:
191:
189:
185:
181:
179:
175:
164:
160:
156:
151:
148:
144:
141:Influenced by
139:
134:
131:
127:
123:
115:
111:
108:
104:
100:
97:
95:
91:
87:
83:
80:
77:
75:
71:
67:
64:
62:
58:
55:
51:
47:
43:
40:
38:
34:
19:
4374:
4085:Coordination
4015:Amdahl's law
3951:Simultaneous
3771:
3633:
3614:C++ Compiler
3593:
3538:
3394:Code::Blocks
3366:Watcom C/C++
3154:Preprocessor
3134:Header files
3016:for OpenCilk
2985:
2978:
2965:
2958:
2949:
2943:
2934:
2904:
2897:
2886:. Retrieved
2877:
2868:
2857:. Retrieved
2853:
2844:
2833:. Retrieved
2824:
2815:
2806:
2797:
2788:
2779:
2770:
2744:
2732:
2720:
2701:
2682:
2673:
2669:
2659:
2647:. Retrieved
2637:
2626:. Retrieved
2622:the original
2612:
2604:
2598:
2589:
2562:
2556:
2473:
2467:
2462:
2458:
2454:
2448:
2444:
2430:
2427:#pragma simd
2418:
2405:
2399:
2251:
2073:
2067:
2063:linked lists
2060:
1958:
1936:
1928:hyperobjects
1927:
1925:
1905:
1901:
1557:parallel map
1554:
1431:
1423:
1398:
1385:
1383:
1350:
1338:
1334:
1324:
1052:
1005:
1000:
998:
991:and execute
952:
950:
897:
895:
703:
684:
667:
649:
629:
627:
618:
609:
589:
573:
550:BSD-licensed
543:
534:www.cilk.com
527:
510:hyperobjects
507:
497:
489:
482:
478:Concurrent C
473:
469:
463:
456:
438:
413:
382:
378:
374:
370:
369:
161:3.0, Rayon (
4521:Scalability
4282:distributed
4165:Concurrency
4132:Programming
3973:Cooperative
3962:Speculative
3898:Instruction
3685:Open source
3602:Development
3485:Objective-C
3266:Windows CRT
2595:"Rayon FAQ"
2260:; e.g., an
2070:determinacy
1478:// optional
704:Below is a
687:_Cilk_spawn
503: 2006
4560:Categories
4526:Starvation
4265:asymmetric
4000:PRAM model
3968:Preemptive
3650:Components
3594:in italics
3461:Descendant
3333:Norcroft C
3159:Data types
3108:Embedded C
2888:2021-12-06
2859:2021-12-06
2850:"OpenCilk"
2835:2021-12-06
2649:25 January
2628:2015-06-25
2549:References
2409:Fortran 90
2173:cilk_spawn
1777:cilk_spawn
1581:coarsening
1402:atomically
1331:spawn_next
1161:spawn_next
948:variable.
695:cilk_spawn
691:_Cilk_sync
660:spawn f(x)
644:See also:
336:2013-09-09
222:2022-09-03
153:Influenced
50:structured
46:procedural
42:imperative
4260:symmetric
4005:PEM model
3774:Microsoft
3635:INTERP/80
3629:Inspector
3463:languages
3295:Compilers
3237:libhybris
3139:Operators
3129:Functions
2670:SIAM News
2567:CiteSeerX
2239:get_value
2221:cilk_sync
1955:summation
1873:recursion
1828:cilk_sync
1804:recursion
1780:recursion
1594:recursion
1335:successor
710:Fibonacci
706:recursive
699:cilk_sync
668:obligated
634:scheduler
558:_Cilk_for
539:Cilk Plus
518:Microsoft
498:Prior to
474:C elision
379:Cilk Plus
302:Developer
286:Cilk Plus
268:.opencilk
241:Unix-like
188:Developer
74:Developer
18:Cilk Plus
4491:Deadlock
4479:Problems
4445:pthreads
4425:OpenHMPP
4350:Ateji PX
4311:computer
4182:Hardware
4049:Elements
4035:Slowdown
3946:Temporal
3928:Pipeline
3772:Sold to
3758:Research
3709:OpenVINO
3585:software
3540:Category
3514:Designer
3429:NetBeans
3419:KDevelop
3399:CodeLite
3244:dietlibc
3211:Variadic
3186:File I/O
3122:Features
2996:/SPLASH.
2992:. Proc.
2882:Archived
2854:OpenCilk
2829:Archived
2825:OpenCilk
2709:Archived
2690:Archived
2481:See also
1999:cilk_for
1916:cilk_for
1908:cilk_for
1816:midpoint
1798:midpoint
1741:midpoint
1483:cilk_for
1434:cilk_for
965:fib(n-1)
630:exposing
615:OpenCilk
435:MIT Cilk
383:OpenCilk
172:OpenCilk
165:library)
130:Dialects
107:manifest
54:parallel
37:Paradigm
4450:RaftLib
4430:OpenACC
4405:GPUOpen
4395:C++ AMP
4370:Charm++
4112:Barrier
4056:Process
4040:Speedup
3825:General
3624:Advisor
3404:Eclipse
3357:Express
3113:MISRA C
2935:HPCwire
1949:and an
1325:Inside
681:method.
679:barrier
430:History
359:Website
334: (
261:Website
252:License
220: (
113:Website
4543:
4420:OpenCL
4415:OpenMP
4360:Chapel
4277:shared
4272:Memory
4207:(SIMT)
4150:Models
4061:Thread
3993:Theory
3964:(SpMT)
3918:Memory
3903:Thread
3886:Levels
3735:Vision
3592:Items
3384:Anjuta
3281:uClibc
3276:Newlib
3254:EGLIBC
3232:Bionic
3201:String
3149:Syntax
3144:String
3083:ANSI C
2994:OOPSLA
2878:GitHub
2600:GitHub
2569:
2522:OpenMP
2506:(ArBB)
2500:(PBB)
2470:deques
2463:fib(2)
2459:fib(1)
2455:fib(2)
2421:OpenCL
2227:output
2140:// ...
2074:et al.
2041:result
1987:result
1959:reduce
1943:monoid
1939:OpenMP
1588:static
1577:pragma
1386:inlets
1380:Inlets
1364:use a
1254:thread
1062:thread
1040:fib(0)
1036:fib(1)
1028:fib(2)
1012:fib(2)
1008:fib(2)
993:fib(0)
989:fib(2)
985:fib(2)
981:fib(1)
977:fib(2)
973:fib(2)
969:fib(1)
957:fib(2)
942:fib(2)
938:fib(0)
930:fib(2)
926:fib(2)
922:fib(1)
910:fib(2)
902:fib(2)
898:single
873:return
774:return
716:, and
576:OpenMP
466:ANSI C
375:Cilk++
159:OpenMP
99:static
4390:Dryad
4355:Boost
4076:Array
4066:Fiber
3980:(CMT)
3953:(SMT)
3867:GPGPU
3730:Havok
3704:Tizen
3700:(TBB)
3694:(DAL)
3677:(TBB)
3671:(MKL)
3665:(IPP)
3659:(DAL)
3641:VTune
3583:Intel
3495:Limbo
3409:Geany
3389:CLion
3313:Clang
3261:klibc
3249:glibc
3216:POSIX
2990:(PDF)
2970:(PDF)
2909:(PDF)
2539:(TBB)
2494:(CnC)
2451:stack
2380:alpha
2314:float
2302:float
2299:const
2293:alpha
2290:float
2116:&
1981:float
1792:start
1762:start
1747:start
1678:start
1648:<=
1645:start
1615:start
1418:abort
1411:inlet
1343:spawn
1339:child
1221:spawn
1194:spawn
961:spawn
906:frame
843:spawn
814:spawn
714:spawn
693:, or
656:spawn
596:spawn
562:Clang
530:Intel
424:Intel
306:Intel
296:Intel
245:macOS
79:Intel
4455:ROCm
4385:CUDA
4375:Cilk
4342:APIs
4302:COMA
4297:NUMA
4228:MIMD
4223:MISD
4200:SIMD
4195:SISD
3923:Loop
3913:Data
3908:Task
3505:Vala
3490:Alef
3376:IDEs
3343:SDCC
3271:musl
3206:Time
3191:Math
3181:Char
3033:and
2651:2016
2517:NESL
2353:<
2275:axpy
2272:void
2262:axpy
2242:());
2176:add1
2158:>
2152:<
2143:cilk
2113:>
2107:<
2098:cilk
2092:add1
2089:void
2023:<
1984:>
1978:<
1969:cilk
1843:loop
1840:void
1732:else
1687:<
1591:void
1507:<
1444:loop
1441:void
1416:The
1409:The
1392:and
1356:and
1263:cont
1143:cont
1137:else
1104:<
1071:cont
1046:and
1038:and
1032:sync
1024:sync
1018:and
916:and
908:for
866:sync
786:else
762:<
729:cilk
722:cilk
718:sync
697:and
689:and
675:sync
664:f(x)
654:The
600:cilk
592:cilk
565:fork
472:(or
459:silk
403:and
385:are
381:and
371:Cilk
314:2010
280:SYCL
270:.org
200:2020
163:Rust
122:.edu
120:.mit
118:cilk
103:weak
88:1994
31:Cilk
4470:ZPL
4465:TBB
4460:UPC
4440:PVM
4410:MPI
4365:HPX
4292:UMA
3893:Bit
3470:C++
3361:C++
3348:TCC
3338:PCC
3328:LCC
3323:ICC
3318:GCC
3303:ACK
3103:C23
3098:C17
3093:C11
3088:C99
2577:doi
2474:own
2335:int
2329:for
2281:int
2256:or
2155:int
2110:int
2080:or
2047:foo
2005:int
1861:int
1849:int
1822:end
1756:end
1738:int
1690:end
1669:int
1663:for
1651:100
1639:end
1624:end
1621:int
1612:int
1600:int
1489:int
1462:int
1450:int
1362:sum
1347:sum
1327:fib
1284:int
1275:int
1266:int
1257:sum
1224:fib
1197:fib
1164:sum
1146:int
1083:int
1074:int
1065:fib
944:'s
932:'s
846:fib
817:fib
792:int
741:int
735:fib
732:int
578:or
405:C++
266:www
256:MIT
192:MIT
182:MIT
66:MIT
48:),
4562::
3500:Go
3475:C#
3359:,
3355:,
2933:.
2921:^
2876:.
2852:.
2823:.
2805:.
2787:.
2769:.
2755:^
2674:31
2672:.
2668:.
2603:.
2597:.
2575:.
2423:.
2377:+=
2365:++
2212:++
2197:==
2188:if
2185:);
2170:);
2146:::
2131:++
2101:::
2056:);
2044:+=
2035:++
1996:);
1972:::
1914:a
1894:);
1825:);
1801:);
1723:);
1699:++
1633:if
1544:);
1519:++
1396:.
1317:);
1245:);
1218:);
1191:);
1131:);
1095:if
861:);
832:);
753:if
673:A
500:c.
480:.
411:.
377:,
373:,
243:,
236:OS
105:,
101:,
52:,
3810:e
3803:t
3796:v
3575:e
3568:t
3561:v
3480:D
3064:e
3057:t
3050:v
2937:.
2891:.
2862:.
2838:.
2809:.
2791:.
2773:.
2676:.
2653:.
2631:.
2583:.
2579::
2395:}
2392:}
2389:;
2386:x
2383:*
2374:y
2371:{
2368:)
2362:i
2359:;
2356:n
2350:i
2347:;
2344:0
2341:=
2338:i
2332:(
2326:{
2323:)
2320:y
2317:*
2311:,
2308:x
2305:*
2296:,
2287:,
2284:n
2278:(
2236:.
2233:r
2230:(
2224:;
2218:}
2215:;
2209:r
2206:{
2203:)
2200:0
2194:r
2191:(
2182:r
2179:(
2167:0
2164:(
2161:r
2137:}
2134:;
2128:r
2125:{
2122:)
2119:r
2095:(
2082:2
2078:1
2053:i
2050:(
2038:)
2032:i
2029:;
2026:N
2020:i
2017:;
2014:0
2011:=
2008:i
2002:(
1993:0
1990:(
1897:}
1891:n
1888:,
1885:0
1882:,
1879:a
1876:(
1870:{
1867:)
1864:n
1858:,
1855:a
1852:*
1846:(
1837:}
1834:}
1831:;
1819:,
1813:,
1810:a
1807:(
1795:,
1789:,
1786:a
1783:(
1774:;
1771:2
1768:/
1765:)
1759:-
1753:(
1750:+
1744:=
1735:{
1729:}
1726:}
1720:a
1717:(
1714:f
1711:=
1708:a
1705:{
1702:)
1696:i
1693:;
1684:i
1681:;
1675:=
1672:i
1666:(
1657:{
1654:)
1642:-
1636:(
1630:{
1627:)
1618:,
1609:,
1606:a
1603:*
1597:(
1573:n
1569:i
1565:a
1561:f
1550:}
1547:}
1541:a
1538:(
1535:f
1532:=
1529:a
1525:{
1522:)
1516:i
1513:;
1510:n
1504:i
1501:;
1498:0
1495:=
1492:i
1486:(
1471:{
1468:)
1465:n
1459:,
1456:a
1453:*
1447:(
1394:y
1390:x
1374:n
1370:k
1358:y
1354:x
1320:}
1314:y
1311:+
1308:x
1305:,
1302:k
1299:(
1293:{
1290:)
1287:y
1281:,
1278:x
1272:,
1269:k
1260:(
1251:}
1248:}
1242:2
1239:-
1236:n
1233:,
1230:y
1227:(
1215:1
1212:-
1209:n
1206:,
1203:x
1200:(
1188:y
1185:?
1182:,
1179:x
1176:?
1173:,
1170:k
1167:(
1158:;
1155:y
1152:,
1149:x
1140:{
1134:}
1128:n
1125:,
1122:k
1119:(
1113:{
1110:)
1107:2
1101:n
1098:(
1092:{
1089:)
1086:n
1080:,
1077:k
1068:(
1048:y
1044:x
1020:y
1016:x
946:y
934:x
918:y
914:x
891:}
888:}
885:;
882:y
879:+
876:x
869:;
858:2
855:-
852:n
849:(
840:=
837:y
829:1
826:-
823:n
820:(
811:=
808:x
804:;
801:y
798:,
795:x
789:{
783:}
780:;
777:n
771:{
768:)
765:2
759:n
756:(
750:{
747:)
744:n
738:(
401:C
338:)
282:.
224:)
147:C
44:(
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.