![](/img/trans.png)
[英]Vector of 64-bit double faster to dot-product than a vector of 32-bit unsigned int?
[英]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.