Iterative solver with gpuArray
Show older comments
Hi all,
In some cases the use of iterative solvers is useful also with full matrices, which is my case. I would like to use an iterative solver like GMRES with full matrices where the matrix and the RHS are gpuArrays, but it looks like this is not provided with Matlab 2013a.
My data are
>> n = 1024;
>> Acpu = rand(n)+100*eye(n);
>> bcpu = rand(n,1);
>> Agpu = gpuArray(Acpu); bgpu = gpuArray(bcpu);
I tried either
>> x = gmres(Agpu,bgpu,[]);
Error using iterchk (line 39)
Argument must be a floating point matrix or a function handle.
Error in gmres (line 86)
[atype,afun,afcnstr] = iterchk(A);
and
>> x = gmres(@(x)(Agpu*x),bgpu,[]);
The following error occurred converting from gpuArray to double:
Conversion to double from gpuArray is not possible
Error in gmres (line 297)
U(:,1) = u;
The only way I found to make it work is
>> x = gmres(@(x)gather(Agpu*x),bcpu,[]);
gmres converged at iteration 7 to a solution with relative residual 2.4e-07.
That is terribly ugly because the matrix-vector-product is continuously swapped from GPU to the system memory. Any suggestion to use GMRES on GPU using MATLAB built-in functions?
Thanks in advance Fabio
2 Comments
Matt J
on 16 Sep 2014
Are you saying you get no acceleration over CPU-gmres? I wouldn't expect the data transfer of Agpu*x to be such a big penalty. It's not like you're transfering all of Agpu, after all.
I also vaguely wonder whether this would continue to be a problem on newer graphics cards and newer versions of CUDA. My understanding was that the newer CUDA versions could share memory with the CPU.
Fabio Freschi
on 16 Sep 2014
Accepted Answer
More Answers (1)
Joss Knight
on 7 Sep 2015
0 votes
If you download the R2015b release of MATLAB (released on 3rd September) you will find that gmres is now supported for sparse gpuArrays, including support for a single sparse matrix preconditioner. See http://www.mathworks.com/help/distcomp/release-notes.html.
Categories
Find more on GPU Computing in MATLAB in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!