Iterative CUDA

Iterative CUDA is a CUDA-based C++ package containing iterative solvers for sparse linear systems. To use it, you would:

  • assemble a matrix in memory in Compressed Sparse Row (CSR) format
  • feed it to Iterative CUDA, which computes a decomposition and copies it onto the GPU
  • call iterative CUDA to solve Ax=b on that matrix. (uses the Conjugate Gradient method, but can be easily extended to other methods)

Iterative CUDA is based on the following excellent pieces of software:

The goal is to turn Iterative CUDA into "yet another solver library", except that the solution is actually performed on the GPU (and hence faster than the CPU by a factor between five and ten).

Note: If you are a PyCUDA user, you need not worry--a more flexible version of this functionality is also available in recent development versions of PyCUDA.

Getting the Code

Iterative CUDA is licensed under the MIT/X11 Consortium license. Other software components contained in Iterative CUDA, as indicated above, have slightly different licenses.

Documentation

See the Wiki. This has build instructions. Usage examples are available in the source distribution under example.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Hi,

Could you please report some speedups of your CG solver with the CSR format?

Thanks. B. M. Rocha

You can expect about a factor of 10. However that's very dependent on the type of matrix, so take this with a large-ish grain of salt.

Andreas

My mistake, looks like 1.1. At the time I bought the card I thought all 2XX series cards had double precision capability. Thanks.

I'm not sure where I'm supposed to ask questions like this, but one of the examples doesn't seem to work for me.

kkelley@linux-7ixy:~/Desktop/temp/iterative-cuda/example> ./solve 5pt_10x10.mtx 
begin solve
terminate called after throwing an instance of 'std::runtime_error'
  what():  cg failed to converge
Aborted

I'm also not sure what kind of information would be useful to give. I'm on opensuse 11.1. I've got a GTS250. I've got the cuda sdk driver and toolkit 2.3 installed I've told cmake the architecture is sm_13

Thank you for any help you can give.

Keith

What compute capability does the 250 support? (You can find out with a utility in the SDK.) Other approach: does it work with sm_11?

Replaced it with a GTX 260 and started over. All sorted. Thanks.