簡體   English   中英

為什么uint32_t與uint64_t的速度不同?

[英]why a uint32_t vs uint64_t speed difference?

試圖了解有關g ++ / cpu如何在運行時處理整數的信息。

我正在測量以下功能需要運行多長時間:

template<class T>
void speedTest() {
    for(T d=0;d<4294967295u;d++)int number;
}

這個簡單的方法將多次運行一個uint32_t最大值的啞循環

當我打電話時:

speedTest<uint32_t>();

該軟件平均需要8.15秒,但在我致電時:

speedTest<uint64_t>();

該軟件平均需要10.35秒。

為什么會這樣呢?

一些可能的原因:

  • 較大的數據類型通常需要更多的內存帶寬
  • 即使該循環計數器保留在寄存器中,CPU可能仍會花費更多時間來進行大數值的計算,尤其是當它需要多個寄存器時(例如,如果您的CPU只有32位寬的寄存器)
  • 編譯器將需要發出額外的機器指令來模擬CPU不直接支持的任何類型
  • 它還取決於優化。 不管int number; ,都可以完全優化掉這種無副作用的循環int number; (可能只是for(T d=0;d<4294967295u;d++);

您可以通過提供一些程序集來繼續進行調查/練習。

暫無
暫無

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

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