The Vienna Computing Library (ViennaCL) is a scientific computing library written in C++. It provides simple, high-level access to the vast computing resources available on parallel architectures such as GPUs and multi-core CPUs by using either a host based computing backend, an OpenCL computing backend, or CUDA. The primary focus is on common linear algebra operations (BLAS levels 1, 2 and 3) and the solution of large sparse systems of equations by means of iterative methods. The following iterative solvers are currently implemented (confer for example to the book of Y.~Saad [26] ):
A number of preconditioners is also provided in order to improve convergence of these solvers, see chapter on algorithms.
The solvers and some preconditioners can also be used with different libraries due to their generic implementation. Currently it is possible to use the solvers and some preconditioners directly with types from the uBLAS library, which is part of Boost [6] . The iterative solvers can directly be used with Armadillo [1], Eigen [11], and MTL 4 [22].
Under the hood, ViennaCL uses a unified layer to access CUDA [23], OpenCL [18], and/or OpenMP [25] for accessing and executing code on compute devices. Therefore, ViennaCL is not tailored to products from a particular vendor and can be used on many different platforms. At present, ViennaCL is known to work on all current CPUs and modern GPUs from NVIDIA and AMD (see table below), CPUs using either the AMD Accelerated Parallel Processing (APP) SDK (formerly ATI Stream SDK) or the Intel OpenCL SDK, and Intels MIC platform (Xeon Phi). Double precision arithmetic on GPUs is only possible if provided in hardware by the respective device. There is no double precision emulation in software in ViennaCL.
NVIDIA GPUs | AMD GPUs | |||||
---|---|---|---|---|---|---|
Compute Device | float | double | Compute Device | float | double | |
GeForce 86XX GT/GSO | ok | - | Radeon HD 4XXX | ok | - | |
GeForce 88XX GTX/GTS | ok | - | Radeon HD 48XX | ok | ok | |
GeForce 96XX GT/GSO | ok | - | Radeon HD 5XXX | ok | - | |
GeForce 98XX GTX/GTS | ok | - | Radeon HD 58XX | ok | ok | |
GeForce GT 230 | ok | - | Radeon HD 59XX | ok | ok | |
GeForce GT(S) 240 | ok | - | Radeon HD 6XXX | ok | - | |
GeForce GTS 250 | ok | - | Radeon HD 69XX | ok | ok | |
GeForce GTX 260 | ok | ok | Radeon HD 7XXX | ok | - | |
GeForce GTX 275 | ok | ok | Radeon HD 77XX | ok | ok | |
GeForce GTX 280 | ok | ok | Radeon HD 78XX | ok | ok | |
GeForce GTX 285 | ok | ok | Radeon HD 79XX | ok | ok | |
GeForce GTX 4XX | ok | ok | Radeon HD 8350 | ok | - | |
GeForce GTX 5XX | ok | ok | Radeon HD 84XX | ok | - | |
GeForce GTX 6XX | ok | ok | Radeon HD 8XXX | ok | ok | |
GeForce GTX 7XX | ok | ok | Radeon R5 2XX | ok | - | |
GeForce GTX 9XX | ok | ok | Radeon R7 2XX | ok | ok | |
Quadro FX 46XX | ok | - | Radeon R9 2XX | ok | ok | |
Quadro FX 48XX | ok | ok | Radeon RX 3XX | ok | ok | |
Quadro FX 56XX | ok | - | FirePro V7XXX | ok | ok | |
Quadro FX 58XX | ok | ok | FirePro V8XXX | ok | ok | |
Tesla C10XX | ok | ok | FirePro V9XXX | ok | ok | |
Tesla C20XX | ok | ok | FirePro WXXXX | ok | ok | |
Tesla K20 | ok | ok |
Available arithmetics in ViennaCL provided by selected GPUs. Letter 'X' is used as a placeholder in numbers to denote multiple GPUs from the same series. Make sure you use recent GPU drivers, as there are some known bugs affecting ViennaCL in older drivers.
For additional details of a look at the Wikipedia list of NVIDIA GPUs and the Wikipedia list of AMD GPUs.