繁体   English   中英

Matlab + CUDA在求解矩阵向量方程A * x = B方面很慢

[英]Matlab + CUDA slow in solving matrix-vector equation A*x=B

我正在计算方程A * x = B,其中A是矩阵,B是矢量,x是答案(未知)矢量。

硬件规格:Intel i7 3630QM(4核),nVidia GeForce GT 640M(384 CUDA核心)

这是一个例子:

>> A=rand(5000);

>> B=rand(5000,1);

>> Agpu=gpuArray(A);

>> Bgpu=gpuArray(B);

>> tic;A\B;toc;

Elapsed time is 1.382281 seconds.

>> tic;Agpu\Bgpu;toc;

Elapsed time is 4.775395 seconds.

不知何故GPU慢得多......为什么? 它在FFT,INV,LU计算中也较慢,这应该与矩阵划分有关。

但是,GPU在矩阵乘法(相同的数据)中要快得多:

>> tic;A*B;toc;

Elapsed time is 0.014700 seconds.

>> tic;Agpu*Bgpu;toc;

Elapsed time is 0.000505 seconds.

主要问题是为什么GPU A \\ B(mldivide)与CPU相比如此之慢?

更新

当A,B(在CPU上),AA,BB(在GPU上)为rand(5000)时,这里有更多结果:

>> tic;fft(A);toc;
Elapsed time is *0.117189 *seconds.
>> tic;fft(AA);toc;
Elapsed time is 1.062969 seconds.
>> tic;fft(AA);toc;
Elapsed time is 0.542242 seconds.
>> tic;fft(AA);toc;
Elapsed time is *0.229773* seconds.
>> tic;fft(AA);toc;

大胆的时代是稳定的时期。 然而GPU几乎慢了两倍。 顺便说一句,为什么GPU在前两次尝试中更慢? 先编译两次吗?

此外:

>> tic;sin(A);toc;
Elapsed time is *0.121008* seconds.
>> tic;sin(AA);toc;
Elapsed time is 0.020448 seconds.
>> tic;sin(AA);toc;
Elapsed time is 0.157209 seconds.
>> tic;sin(AA);toc;
Elapsed time is *0.000419 *seconds

在两次计算之后,GPU在罪计算中的速度非常快。

那么,为什么GPU在矩阵除法,fft和类似的计算中如此缓慢,尽管它在矩阵乘法和三角函数中如此之快? 问题实际上不应该是这样......在所有这些计算中GPU应该更快,因为Matlab已经发布了GPU的重叠函数(mldivide,fft)。

请问有人帮我解决这些问题吗? :)

请阅读Matlab如何计算解决方案。 它将帮助您理解为什么GPU速度较慢。

我会试着用几句话说出来。

A * x = b变为L *(U * x = y)= b,L * U = A.

  1. 所以Matlab将A转换为L * U(据我所知,这个过程不能完全并行完成,而是由于它们的性质,一些步骤可以并行完成)
  2. 然后Matlab求解L * y = B并找到y。 (此过程不能并行完成,因为每个步骤都需要先前的数据)
  3. 然后Matlab求解U * x = y并找到x。 (此过程不能并行完成,因为每个步骤都需要先前的数据)

因此GPU时钟比CPU慢,并且由于进程不能并行完成,因此CPU速度更快。 不,除非你提出一个更好的方法(祝你好运!)然后GPU将总是较慢,除非在一些非常具体的情况下。

解释的第1部分来自user2230360的答案,但你的问题是双重的,所以我将添加一些关于乘法的内容。

如前所述,即使有一些步骤,LU分解也不是很容易并行化。 然而,矩阵乘法是非常可并行化的。 如果您正在使用这些东西,您应该能够手工进行矩阵乘法,然后您就会知道在A * B = C中计算矩阵C的元素可以按您想要的任何顺序进行 - 因此可能性用于并行计算。 这可能就是为什么你看到闪电般的快速乘法,但线性系统的解决速度很慢。 一个人不能“和另一个人一样多”并行化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM