ViennaCL - The Vienna Computing Library  1.7.0
Free open-source GPU-accelerated linear algebra and solver library.
Introduction

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] ):

  • Conjugate Gradient (CG)
  • Stabilized BiConjugate Gradient (BiCGStab)
  • Generalized Minimum Residual (GMRES)

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 floatdouble   Compute Device floatdouble
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.