Sieve C++ Parallel Programming System

Sieve C++ Parallel Programming System

The Sieve C++ Parallel Programming System is a C++ compiler and parallel runtime designed and released by Codeplay that aims to simplify the parallelization of code so that it may run efficiently on multi-processor or multi-core systems. It is an alternative to other well known parallelisation methods such as OpenMP, the Rapidmind Development Platform and Intel Threading Building Blocks.


Sieve is a C++ compiler that will take a section of serial code, which is annotated with sieve markers, and parallelize it automatically. The programmer wraps code they wish to parallelise inside a lexical scope, which is tagged as 'sieve'. Inside this scope, referred to commonly as a 'sieve block', certain rules apply [] :

* All side-effects within the sieve block are delayed until the end of the scope.
* Side-effects are defined to be any modifications to data declared outwith the sieve block scope.
* Only functions annotated with sieve or immediate can be called.

Delaying side-effects removes many small dependencies which would usually impede automatic parallelization. Reads and writes can be safely reordered by the compiler as to allow better use of various data movement mechanisms, such as Direct Memory Access(DMA). In addition, alias analysis and dataflow analysis can be simplified [] . The compiler can then split up code within the sieve block much easier, to exploit parallelism.

Memory Configuration

This separation of scopes also means the Sieve System can be used in non-uniform memory architectures. Multi-core CPUs such as the Cell microprocessor used in the Playstation 3 are of this type, in which the fast cores have local memories that must be utilized to exploit performance inherent in the system. It is also able to work on shared memory systems, like x86, meaning it can run on various different architectures. Sieve blocks can also be nested [] for systems with a hierarchy of different memories and processing elements.

Parallelization and Scalability

The sieve compiler can split code within a sieve block into chunks either implicitly or explicitly though a 'splithere' statement. For instance, the following example shows parallelizaing a loop:

sieve { for (iterator i(0); iThe compiler will implicitly add a splitpoint above the for loop construct body, as an entry point. Similarly one will be added after as an exit point.

In the Sieve System, only local variables to the sieve block scope may have dependencies. However, these dependencies must not cross splitpoints; they will generate compiler warnings(cite). In order to parallelize this loop, a special 'Iterator' class may be used in place of a standard integer looping counter. There are safe for parallelization, and the programmer is free to create new Iterator classes at will [] . In addition to these Iterator classes, the programmer is free to implement classes called 'Accumulators' which are used to carry out reduction operations.

The way the Iterator classes are implemented opens up various means for scalability. The Sieve Parallel Runtime employs dynamic speculative execution when executing on a target platform. This can yield very good speedups, however running on a single core machine can incur overheads [] .


Determinism is an interesting feature of the Sieve System. If executing a parallel Sieve program on a multi core machine yields a bug, the bug will not disappear when ran on a single core to aid debugging [] [] . This is a huge step forward for parallel computer software, as it eliminates Race Conditions which are one of the most common bugs to arise from concurrent programming. The removal of the need to consider concurrency control structures within a sieve block can speed up development time and results in safer code.

upported Systems

The system is designed for hierarchical based systems with homogeneous or heterogeneous CPU cores which have local memories, connected via DMA engines or similar memory transfer models.

Sieve has been shown [] successfully operating on multi-core x86 systems, the Ageia PhysX Physics Processing Unit, and the IBM Cell microprocessor. ANSI C is generated if a compiler code generator is not available for a certain target platform. This allows for autoparallelization using existing C compilation toolkits [] .


* [ Auto-parallelisation of Sieve C++ Programs] Alastair Donaldson, Anton Lokhmotov, Colin Riley, Andrew Cook. In Proceedings of the Euro-Par Workshop Highly Parallel Processing on a Chip (HPPC'07), Rennes, France, August 2007. Lecture Notes in Computer Science 4854, 2007.
* [ Delayed Side-effects Ease Multi-core Programming] Anton Lokhmotov, Alan Mycroft, Andrew Richards. In Proceedings of the 13th International Euro-Par Conference, Rennes, France, August 2007. Lecture Notes in Computer Science 4641, 641-650, 2007.
* [ Implementing deterministic declarative conucrrency using sieves] S. Lindley. In proceedings of DAMP 2007: Workshop on Declarative Aspects of Multicore Programming Nice, France, January 2007.
* [ The Codeplay Sieve C++ Parallel Programming System] A. Richards. White paper, 2006.
* [ Codeplay Sieve C++ System Presentation] Scott McKenzie, presented at [ MicroGrid 2006] .

ee also

*Software transactional memory
*Alias analysis
*Intel Threading Building Blocks
*Speculative execution

External links

* [ Codeplay Sieve Website]

Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Look at other dictionaries:

  • Sieve — In general, a sieve separates wanted/desired elements from unwanted material using a tool such as a mesh, net or other filtration or distillation methods, but it is also used for classification of powders by particle size, or for size measurement …   Wikipedia

  • Codeplay — Software Limited is a compiler and software tools developer based in Edinburgh, Scotland. Codeplay develop C/C++ compilers for multi core and special purpose processor architectures, offering their Sieve C++ Multicore Programming System as a… …   Wikipedia

  • Физический ускоритель — Физический процессор (англ. Physics Processing Unit  англ. PPU, «физический ускоритель», «ускоритель физики»)  устройство, чип, выделенный специализированный процессор, предназначенный для обработки физических вычислений преимущественно в… …   Википедия

  • Физический процессор — Данные в этой статье приведены по состоянию на 2008 год. Вы можете помочь, обновив информацию в статье …   Википедия

  • Ускоритель физики — Физический процессор (англ. Physics Processing Unit  англ. PPU, «физический ускоритель», «ускоритель физики»)  устройство, чип, выделенный специализированный процессор, предназначенный для обработки физических вычислений преимущественно в… …   Википедия

  • Multi-core processor — Diagram of a generic dual core processor, with CPU local level 1 caches, and a shared, on die level 2 cache …   Wikipedia

  • Multi-core — A multi core processor (or chip level multiprocessor, CMP) combines two or more independent cores into a single package composed of a single integrated circuit (IC), called a die, or more dies packaged together. The individual core is normally a… …   Wikipedia

  • SZTAKI Desktop Grid — (SzDG) is a BOINC project located in Hungary run by the Computer and Automation Research Institute (SZTAKI) of the Hungarian Academy of Sciences. Contents 1 History 2 Local SZTAKI Desktop Grid 3 Scientific Research …   Wikipedia

  • ALGOL 68 — Infobox programming language name = ALGOL 68 paradigm = multi paradigm: concurrent bull; imperative year = 1968, last revised 1973 designer = A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck and C.H.A. Koster, et al. developer = latest release… …   Wikipedia

  • List of mathematics articles (S) — NOTOC S S duality S matrix S plane S transform S unit S.O.S. Mathematics SA subgroup Saccheri quadrilateral Sacks spiral Sacred geometry Saddle node bifurcation Saddle point Saddle surface Sadleirian Professor of Pure Mathematics Safe prime Safe… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”