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 [21] ):
The solvers and preconditioners can also be used with different libraries due to their generic implementation. Currently it is possible to use the solvers and preconditioners directly with types from the uBLAS library, which is part of Boost [4] . The iterative solvers can directly be used with Eigen [8] and MTL 4 [17].
Under the hood, ViennaCL uses a unified layer to access CUDA [18], OpenCL [13], and/or OpenMP [20] 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 GPU. There is no double precision emulation in software in ViennaCL.
Compute Device | float | double |
---|---|---|
NVIDIA Geforce 86XX GT/GSO | ok | - |
NVIDIA Geforce 88XX GTX/GTS | ok | - |
NVIDIA Geforce 96XX GT/GSO | ok | - |
NVIDIA Geforce 98XX GTX/GTS | ok | - |
NVIDIA GT 230 | ok | - |
NVIDIA GT(S) 240 | ok | - |
NVIDIA GTS 250 | ok | - |
NVIDIA GTX 260 | ok | ok |
NVIDIA GTX 275 | ok | ok |
NVIDIA GTX 280 | ok | ok |
NVIDIA GTX 285 | ok | ok |
NVIDIA GTX 4XX | ok | ok |
NVIDIA GTX 5XX | ok | ok |
NVIDIA GTX 6XX | ok | ok |
NVIDIA Quadro FX 46XX | ok | - |
NVIDIA Quadro FX 48XX | ok | ok |
NVIDIA Quadro FX 56XX | ok | - |
NVIDIA Quadro FX 58XX | ok | ok |
NVIDIA Tesla 870 | ok | - |
NVIDIA Tesla C10XX | ok | ok |
NVIDIA Tesla C20XX | ok | ok |
ATI Radeon HD 4XXX | ok | - |
ATI Radeon HD 48XX | ok | ok |
ATI Radeon HD 5XXX | ok | - |
ATI Radeon HD 58XX | ok | ok |
ATI Radeon HD 59XX | ok | ok |
ATI Radeon HD 68XX | ok | - |
ATI Radeon HD 69XX | ok | ok |
ATI Radeon HD 77XX | ok | - |
ATI Radeon HD 78XX | ok | - |
ATI Radeon HD 79XX | ok | ok |
ATI FireStream V92XX | ok | ok |
ATI FirePro V78XX | ok | ok |
ATI FirePro V87XX | ok | ok |
ATI FirePro V88XX | ok | ok |
Available arithmetics in ViennaCL provided by selected GPUs. Some older versions of the Stream SDK (APP SDK) from AMD/ATI may not comply to the OpenCL standard for double precision extensions.