2010-08-18 85 views
2

在CUDA中使用float而不是int更好嗎?float vs int in cuda

float減少銀行衝突並確保合併? (或與此無關)

+0

它們具有相同的大小,但不同的目的 – Anycorn 2010-08-18 05:46:05

回答

4

讀共享內存時發生的bank衝突都與讀取的數據量有關。所以,由於intfloat是相同的大小(至少我認爲它們在所有CUDA平臺上),所以沒有區別。

聚並通常是指全局內存訪問 - 同樣,這與讀取的字節數有關,而不是數據類型。

2

intfloat都是四個字節,因此它在合併全局內存訪問或共享內存訪問上的存儲體衝突方面沒有任何區別(如果您以相同的方式訪問它們) 。

話雖如此,你可能會有更好的性能與float s,因爲設備的設計儘可能快,它們通常用於控制和索引等,因此具有較低的性能。當然它比這更復雜 - 如果你什麼也沒有,但是整數硬件會閒置,這將是一種浪費。

+0

INTS周圍* Y典型GTX卡慢10倍。典型GPU上的整數單位少得多。除非您有特定的理由,否則不要使用整數或雙寬度浮點數。 – 2017-10-05 06:11:07

1

存儲體衝突和聚合都與內存訪問模式有關(無論線程內的線程是否都以統一的跨度讀取/寫入不同位置)。因此,這些問題與數據類型無關(float,int,double等)

請注意,數據類型確實會影響計算性能。單精度浮點數比雙精度浮點數要快。GPU中強壯的FPU通常意味着在固定點進行計算是不必要的,甚至可能是有害的。

0

查看CUDA開發人員指南的「數學函數」部分。使用設備運行時功能(內在功能)可以爲各種類型提供更好的性能。您可以在較少的時鐘週期內以一次操作執行多個操作。

對於SectionC.1的某些功能,設備運行時組件中存在一個不太準確但速度更快的版本;它具有以__爲前綴的相同名稱 (例如__sinf(x))。編譯器有一個選項 (-use_fast_math),強制Table中的每個函數編譯爲其內部函數...有選擇地替換數學函數 調用通過調用固有函數,只有在性能提高的情況下,以及可以容忍更改的屬性(如精確度降低和不同的特殊情況處理)的情況下才可以使用。

  • 例如,而不是使用=>使用:X/Y => __fdividef(X,Y); SINF(X)=> __sinf(X)

,你會發現更多的方法,比如x + c。與一個函數執行..