簡體   English   中英

使用int32_t而不是double運行矢量點積是否更快?

[英]Is it faster to run a vector dot product using int32_t instead of a double?

我讀過幾篇文章(例如, C ++內置類型 ),說對於現代intel XEON CPU,使用int32_t和使用double沒有區別。

但是,我注意到當我進行向量乘法時,

std::vector<T> a, b, c;
// run some initialization
for( std::size_t i = 0; i < 1000000; ++i){
    c[i] = a[i] * b[i];
}  

如果我將T設置為int32_t,則這段代碼的運行速度比將T設置為double的快得多。

我在XEON E5620 + centOS上運行

有人可以在這里澄清一下嗎? 使用int32_t是否更快?

您正在使用200萬個輸入和100萬個輸出運行一百萬個乘法。 如果使用4個字節的值,則為12 MB。 如果使用8個字節的值,則為24MB。 E5620具有12 MB緩存。

這是我的CPU產生的結果;

Intel(R)CoreTM i5-8250U CPU @ 1.60GHz gcc 7.3

純gcc,無優化

short add/sub: 1.586071 [0]
short mul/div: 5.601069 [1]
long add/sub: 1.659803 [0]    
long mul/div: 8.145207 [0] 
long long add/sub: 1.826622 [0]    
long long mul/div: 8.161891 [0]  
float add/sub: 2.685403 [0]    
float mul/div: 3.758135 [0]
double add/sub: 2.662717 [0]
double mul/div: 4.189572 [0]

與gcc -O3

short add/sub: 0.000001 [0]
short mul/div: 4.491903 [1]
long add/sub: 0.000000 [0]
long mul/div: 6.535028 [0]
long long add/sub: 0.000000 [0]
long long mul/div: 6.543064 [0]
float add/sub: 1.182737 [0]
float mul/div: 2.218142 [0]
double add/sub: 1.183991 [0]
double mul/div: 2.529001 [0]

結果確實取決於您的體系結構和優化。 我記得我20年前在我的大學里有一台IBM Sparc工作站,它的浮點性能比整數好。

請閱讀這個不錯的演講;

暫無
暫無

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

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