Vc: A C++ library for explicit vectorization. Recent generations of CPUs, and GPUs in particular, require data-parallel codes for full efficiency. Data parallelism requires that the same sequence of operations is applied to different input data. CPUs and GPUs can thus reduce the necessary hardware for instruction decoding and scheduling in favor of more arithmetic and logic units, which execute the same instructions synchronously. On CPU architectures this is implemented via SIMD registers and instructions. A single SIMD register can store N values and a single SIMD instruction can execute N operations on those values. On GPU architectures N threads run in perfect sync, fed by a single instruction decoder/scheduler. Each thread has local memory and a given index to calculate the offsets in memory for loads and stores. Current C++ compilers can do automatic transformation of scalar codes to SIMD instructions (auto-vectorization). However, the compiler must reconstruct an intrinsic property of the algorithm that was lost when the developer wrote a purely scalar implementation in C++. Consequently, C++ compilers cannot vectorize any given code to its most efficient data-parallel variant. Especially larger data-parallel loops, spanning over multiple functions or even translation units, will often not be transformed into efficient SIMD code. The Vc library provides the missing link. Its types enable explicitly stating data-parallel operations on multiple values. The parallelism is therefore added via the type system. Competing approaches state the parallelism via new control structures and consequently new semantics inside the body of these control structures.
Keywords for this software
References in zbMATH (referenced in 9 articles )
Showing results 1 to 9 of 9.
- Bastian, Peter; Blatt, Markus; Dedner, Andreas; Dreier, Nils-Arne; Engwer, Christian; Fritze, René; Gräser, Carsten; Grüninger, Christoph; Kempf, Dominic; Klöfkorn, Robert; Ohlberger, Mario; Sander, Oliver: The \textscDuneframework: basic concepts and recent developments (2021)
- Kempf, Dominic; Heß, René; Müthing, Steffen; Bastian, Peter: Automatic code generation for high-performance discontinuous Galerkin methods on modern architectures (2021)
- Dohr, Stefan; Zapletal, Jan; Of, Günther; Merta, Michal; Kravčenko, Michal: A parallel space-time boundary element method for the heat equation (2019)
- Peter Bastian, Markus Blatt, Andreas Dedner, Nils-Arne Dreier, Christian Engwer, René Fritze, Carsten Gräser, Christoph Grüninger, Dominic Kempf, Robert Klöfkorn, Mario Ohlberger, Oliver Sander: The DUNE Framework: Basic Concepts and Recent Developments (2019) arXiv
- Phipps, Eric T.; Kolda, Tamara G.: Software for sparse tensor decomposition on emerging computing architectures (2019)
- Guckenberger, Achim; Gekle, Stephan: A boundary integral method with volume-changing objects for ultrasound-triggered margination of microbubbles (2018)
- Merta, M.; Zapletal, J.: A parallel library for boundary element discretization of engineering problems (2018)
- Zapletal, Jan; Of, Günther; Merta, Michal: Parallel and vectorized implementation of analytic evaluation of boundary integral operators (2018)
- Zapletal, Jan; Merta, Michal; Malý, Lukáš: Boundary element quadrature schemes for multi- and many-core architectures (2017)