与gpuArray迭代解算器
7视图(30天)
显示旧的评论
你好,
在某些情况下,使用迭代解决是有用的也有完整的矩阵,这是我的情况。我想使用一个迭代解算器像gmr完整矩阵在矩阵和RHS gpuArrays,但是看起来这不是2013提供了Matlab。
我的数据是
> > n = 1024;
> > Acpu =兰德(n) + 100 *眼(n);
> > bcpu =兰德(n, 1);
> > Agpu = gpuArray (Acpu);bgpu = gpuArray (bcpu);
我试过
> > x = gmr (Agpu bgpu, []);
错误使用iterchk(39)行
论点必须是一个浮点矩阵或一个函数处理。
错误在巨磁电阻(86行)
[atype, afun afcnstr] = iterchk(一个);
和
> > x = gmr (@ (x) (Agpu * x) bgpu, []);
的错误发生后从gpuArray双:
转换从gpuArray翻倍是不可能的
错误在巨磁电阻(297行)
U (: 1) = U;
我发现的唯一途径,使其工作
> > x = gmr (@ (x)收集(Agpu * x), bcpu, []);
巨磁电阻聚集在迭代7与相对剩余2.4 e-07解决方案。
非常丑是因为GPU的矩阵向量乘积不断交换系统内存。任何建议用gmr GPU使用MATLAB内置函数?
提前谢谢法比奥
接受的答案
马特·J
2014年9月16日
编辑:马特·J
2014年9月16日
大小甚至更大的问题(n = 10240)和一个新的显卡(GTX 580),我看到开销可以忽略不计,CPU和GPU之间的交换,
n = 1024 * 10;
Acpu =兰德(n) + 100 *眼(n);
bcpu =兰德(n, 1);
Agpu = gpuArray (Acpu);
bgpu = gpuArray (bcpu);
gputimeit (@ () Agpu * bgpu)在gpu %所有数据
% 0.0052秒
gputimeit(@()收集(Agpu * bcpu))%要求数据传输
% 0.0054秒
加速在gmr似乎也不错(4)倍
抽搐;
x = gmr (@ (x) Acpu * x, bcpu, []);
toc
%运行时间是0.391786秒。
抽搐;
x = gmr (@ (x)收集(Agpu * x), bcpu, []);
toc
%运行时间是0.097924秒。
答案(1)
神骑士
2015年9月7日
如果你下载R2015b释放MATLAB(发布于9月3日)你会发现
巨磁电阻
对稀疏gpuA万博1manbetxrrays现在支持,包括支持一个稀疏矩阵预处理。看到
//www.tianjin-qmedu.com/help/distcomp/release-notes.html
。