2013-04-16 36 views
2

我正在做A.I的博士研究。我已經到了必須開始爲我的測試平臺使用CUDA庫的部分。 我以前玩過CUDA,並且對GPGPU的工作原理有了基本的瞭解,但是我對浮點精度感到困擾。用於研究目的的nVidia GPUs:浮點精度

看看GTX680我看到FP64:1/24 FP32,而特斯拉有完整的FP64 1.31 TFLOPS。我非常清楚一個是遊戲卡,另一個是專業卡。

我問的原因很簡單:我買不起特斯拉,但我可能會得到兩個GTX680。雖然主要目標是擁有儘可能多的CUDA內核和內存,但浮點精度可能會成爲問題。

我的問題是:

  1. 怎樣的妥協中有多少是在遊戲GPU的小float精度?
  2. 是不是32位浮點精度的1/24太小?特別是與之前1/8的費米相比FP32
  3. 由於浮點精度較小,是否存在計算結果錯誤的風險?即在SVM,VSM,矩陣操作,深信仰網絡等方面,我是否可能因浮點數較小而導致算法結果出現問題,還是僅僅意味着操作需要更長時間/使用更多內存?

謝謝!

+4

這些意見徵求問題通常不適合用於計算器。在你的問題得到解決之前,讓我說出我的觀點:如果你買得起兩臺GTX 680,你也可以購買一臺GTX Titan,你可以獲得本機的FP64速度(如特斯拉的1/3 FP32)。這可以爲您節省多GPU編程的痛苦(除非您想學習這些)。它甚至接近兩個GTX 680的FP32速度,並具有計算能力3.5的其他優點,如每個線程最多255個寄存器。 – tera

+0

@tera謝謝,這更有意義。我發佈後正在看泰坦的1/3 F32。不,我不想進入多GPU編程,只需導入cuda庫。 –

回答

7

這些都是非常主觀的問題。

您不完全清楚您是否理解C或C++ floatdouble數據類型之間的差異。 FP32與FP64對比指的是C或C++中的floatdouble。您提到的1/8和1/24的數字不影響精度,但它們影響吞吐量。您提到的所有GPU都具有一些FP64雙精度功能,因此差異不會低至的性能多達的性能

瞭解您所關心的代碼是否依賴於雙精度浮點數,對您而言非常重要。僅僅通過「矩陣運算」來說明FP32(float)還是FP64(double)很重要是不夠的。

如果您的代碼取決於FP64 double,那麼這些性能比(1/8,1/24等)將是相關的。但是你的代碼仍然可以運行,也許更慢。

您還在使用某些可能導致混淆的術語。特斯拉指的是NVIDIA GPGPU計算產品系列。提及一個特斯拉家族的特定成員會更好。自從您提到1.31 TFlops FP以來,您指的是Tesla K20X。請注意,K20X在FP64吞吐量和FP32吞吐量之間也有一定的比率(即它可以比FP32代碼上的1.31 TFlops更快)。

如果您的算法依賴於double,它們仍然可以運行在您提及的任何產品上,結果的準確性應該是相同的,無論產品如何,但性能會降低,因此產品依賴於該產品。如果您的算法取決於float,假設浮點吞吐量是限制因素,那麼它們在任何給定產品上的運行速度都會高於double。您可能還想考慮GeForce GTX Titan。它具有與Tesla K20/K20x大致相當的雙精度浮點性能。

+0

謝謝,你剛剛證實了我開始理解的內容。 GTX系列中較低的FP會影響雙精度處理的速率,是否正確? 另外,是的,我使用稀疏矩陣的雙打,這是我關心浮點精度的主要原因。 從你的回答和上面的評論看來,GTX Titan似乎是兩者之間的最佳折衷。 –

+1

是的,對於大多數GeForce系列成員來說,雙精度吞吐量顯着低於Tesla系列的各種成員。 GTX Titan是例外。由於GeForce的主要目標是消費者圖形和遊戲,它們完全不依賴FP64,所以FP64的吞吐量較低並不重要。特斯拉方面的K10也是另一個例外,因爲它具有相對較低的FP64吞吐量。 –

+1

根據稀疏矩陣處理的性質,即使DP遊戲GPU的DP吞吐量較低,代碼也可能會受到DP吞吐量限制之前的內存吞吐量的限制。這取決於FLOPS /字節的比率。 – njuffa