How to solve linear equation using GPU?
20 次查看(过去 30 天)
显示 更早的评论
Assume I need to solve a linear matrix equation Ax=b where A is a 3x3 non-singular matrix and b is a column vector of 3 elements. I know I can use inv(A)*b or A\b to get the solution, but the statement is run in CPU. Now I wanna make sure GPU is employed to run the same statement. Since I'm not familiar with GPU support in Matlab so I ask you for help: how to do it? Ideally I guess there may be a function like enableGPU(true) so that all subsequent statements will be run in GPU automatically. Also, I don't want to limit myself to the above statements. If there is some specific GPU functions like gpuInv(A), that's fine, please tell me that function. Hopefully the GPU version of Matlab code to solve linear equation could be faster than its CPU counterpart. Thanks a lot.
0 个评论
采纳的回答
Walter Roberson
2017-1-25
编辑:Walter Roberson
2017-1-25
gA = gpuArray(A);
gB = gpuArray(B);
x = gA \ gB;
If you test with
gputimeit(@() gA \ gB, 0)
and compare to
timeit(@() A \ B, 0)
then at least on my system, the CPU version is about 80 times faster.
Since the size is fixed and you promise the array is non-singular, you can do still better:
function sss = sim3(A,B)
t2 = A(1,1).*A(2,2).*A(3,3);
t3 = A(1,2).*A(2,3).*A(3,1);
t4 = A(1,3).*A(2,1).*A(3,2);
t7 = A(1,1).*A(2,3).*A(3,2);
t8 = A(1,2).*A(2,1).*A(3,3);
t9 = A(1,3).*A(2,2).*A(3,1);
t5 = t2+t3+t4-t7-t8-t9;
t6 = 1.0./t5;
sss = t6.*(A(1,2).*A(2,3).*B(3)-A(1,3).*A(2,2).*B(3)-A(1,2).*A(3,3).*B(2)+A(1,3).*A(3,2).*B(2)+A(2,2).*A(3,3).*B(1)-A(2,3).*A(3,2).*B(1));-t6.*(A(1,1).*A(2,3).*B(3)-A(1,3).*A(2,1).*B(3)-A(1,1).*A(3,3).*B(2)+A(1,3).*A(3,1).*B(2)+A(2,1).*A(3,3).*B(1)-A(2,3).*A(3,1).*B(1));t6.*(A(1,1).*A(2,2).*B(3)-A(1,2).*A(2,1).*B(3)-A(1,1).*A(3,2).*B(2)+A(1,2).*A(3,1).*B(2)+A(2,1).*A(3,2).*B(1)-A(2,2).*A(3,1).*B(1));
This averages 20 times faster than \ on the CPU and averages 1500 times faster than \ on the GPU.
Communications overhead with the GPU is responsible for the relative slowness. If you were using larger matrices then at some point the GPU would be faster.
0 个评论
更多回答(1 个)
John D'Errico
2017-1-25
Do you have the proper toolbox? I would suggest this:
https://www.mathworks.com/products/parallel-computing.html
If you don't have it, then, no, you cannot simply invoke computations on your GPU.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 GPU Computing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!