簡體   English   中英

對於小數據集,為什么使用cula(dgesv)求解線性方程組比mkl(dgesv)慢

[英]Why is solving system of linear equations using cula(dgesv) slower than mkl (dgesv) for small data sets

我已經編寫了CUDA C和C程序,以使用CULA例程dgesv和MKL例程dgesv求解矩陣方程Ax = b。 對於較小的數據集,CPU程序似乎比GPU程序快。 但是隨着數據集增加到500個以上,GPU克服了CPU的困擾。我使用的戴爾筆記本電腦具有i3 CPU和Geforce 525M GPU。 對於GPU最初的緩慢性能的最佳解釋是什么?

我編寫了另一個程序,該程序接受兩個向量,將它們相乘並相加。 就像點積一樣,只是結果是矢量和而不是標量。 在此程序中,即使對於較小的數據集,GPU也比CPU更快。 我正在使用同一筆記本。 為什么與上面解釋的數據集相比,即使對於較小的數據集,此程序中的GPU為何速度更快? 是因為求和中沒有太多的計算嗎?

與大數據集相比,GPU在小數據集上的吸引力降低並不少見。 其原因將取決於特定算法。 GPU通常具有比CPU更高的主內存帶寬,並且在繁重的數字運算方面通常也能勝過它們。 但是,GPU通常僅在問題固有的並行性可以暴露的情況下才能正常工作。 利用這種並行性,算法可以利用更大的內存帶寬以及更高的計算能力。

但是,在GPU不能執行任何操作之前,有必要將數據發送到GPU。 這就給GPU版本的代碼帶來了“成本”,而這些成本通常不會出現在CPU版本中。

更准確地說,當GPU上的計算時間(通過CPU)的減少超過數據傳輸的成本時,GPU將提供好處。 我認為求解線性方程組的復雜度介於O(n ^ 2)和O(n ^ 3)之間。 對於非常小的n,此計算復雜度可能不足以抵消數據傳輸的成本。 但是很明顯,隨着n變大,它應該變大。 另一方面,向量運算可能只是O(n)復雜度。 因此,收益方案將有所不同。

對於O(n ^ 2)或O(n ^ 3)情況,隨着我們移至更大的數據集,傳輸數據的“成本”隨着O(n)的增加而增加,但求解的計算需求隨着O(n)的增加而增加。 n ^ 2)(或O(n ^ 3))。 因此,較大的數據集應具有成倍增大的計算工作負載,從而減少數據傳輸“成本”的影響。 另一方面,O(n)問題可能沒有這種縮放動態。 工作負載的增長速度與數據傳輸的“成本”相同。

還要注意,如果可以通過將數據傳輸到GPU的“成本”與計算工作重疊起來而被隱藏,則重疊部分的“成本”將變為“免費”,即,它不會對整體求解時間造成影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM