簡體   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