[英]what is the meaning of __builtin_ prefix in standard library implementation?
[英]GCC __builtin_ functions
以下功能是在一個時鍾周期內執行的嗎?
__builtin_popcount
__builtin_ctz
__builtin_clz
同樣的ll(64位)版本的時鍾周期是多少。 他們是便攜式的嗎 為什么或者為什么不?
這些功能是在一個時鍾周期內執行的嗎?
不必要。 在可以使用單個指令實現它們的體系結構中,它們通常是計算該功能的最快方式(但仍然不一定是單個時鍾周期)。 在不能將其作為單個指令實現的體系結構中,它們的性能不太確定。
在我的處理器(Core 2 Duo)上, __builtin_ctz
和__builtin_clz
可以用一條指令(位掃描正向和位掃描反向)實現。 但是,在我的處理器上使用單個指令無法實現__builtin_popcount
。 對於__builtin_popcount
,gcc 4.7.2調用庫函數,而clang 3.1生成內聯指令序列(實現這個位錯誤的hack )。 顯然,這兩種實現的性能將不盡相同。
它們便攜嗎?
它們不能跨編譯器移植。 它們起源於GCC(據我所知),並且也在其他一些編譯器中實現,例如Clang。
支持這些功能的編譯器可以為多種架構提供它們,但實現質量(性能)可能會有所不同。
像這樣的__builtin
函數用於以比使用內聯匯編更簡單的方式訪問特定的機器指令。 如果您需要實現最高性能並且願意犧牲可移植性來執行此操作,或者為未提供這些功能的編譯器或平台提供替代實現,那么使用它們是有意義的。 如果最佳低級性能是您的目標,您還應檢查編譯器的匯編輸出,以確定它是否真正生成您希望它使用的指令。
通過將-O3 -march=native -S
編譯為匯編代碼,您可以初步了解編譯器對其執行的操作。 在那里你可以檢查這是否只解析為一個匯編語句。 如果是這樣,這並不能保證在一個周期內完成。 要知道實際成本,你必須衡量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.