在今天的現代處理器上,分支條件下的大於或大於或等於比較之間是否存在任何性能差異?如果我的情況同樣容易,那麼選擇>
超過>=
或反之亦然? (這將用於英特爾或AMD硬件上的編譯語言)大於或大於或等於之間是否有任何性能差異?
回答
不應該有,因爲他們計算的方式比較不同的謂詞之間的顯着差異(注意我沒有詳細閱讀說明書x86的,因此它可能工作不同):
大多數指令通常你至少有:carry(c),overflow(o),zero(z)和negative(n)。
使用由x-y指令創建的謂詞(可靠地創建上述4),我們可以輕鬆地找出所有想要的比較。對於無符號數字:
x = y z
x != y !z
x < y !c
x <= y !c + z
x > y c . !z
x >= y c
所以它幾乎沒有任何區別。但是之後會有一些差異,如果我們可以使用TEST(這是一個AND而不是完整的相減)或不得不使用CMP(這是相減),那麼這些差異大部分歸結於事實。測試更有限但更快(通常)。
另外現代體系結構(從intel的c2d開始)有時可以將兩個μops融合成一個宏操作 - 所謂的宏操作融合具有一些很好的優點。而且這個規則從一個架構變成了另一個架構,並且有點長。例如,僅測試溢出,奇偶校驗或符號標誌(JO,JNO,JP,JNP,JS,JNS)的分支可以與TEST融合,但不能與c2d和nehalems(you bet I looked that one up - section 7.5)上的CMP融合。
所以我們可以說它是複雜的,而不是擔心這樣的事情?這是除了如果你正在編寫一個編譯器的優化器,因爲真的 - 獨立於你在源代碼中編寫的東西,編譯器會做它想要的 - 並且有很好的理由(例如,如果JGE理論上速度更快,寫如果(x < y)通常..)。如果你真的需要一個建議:比較0通常更快。
我不太確定底層實現是如何在ALU/FPU中完成的,但是對於所有這些實現應該只有一個操作(在原始類型上即是)
我真希望這只是一個問題,因爲你是好奇,而不是說你要優化,這將從未給你一個大的性能提升,最有可能你的代碼將包含遠遠性能問題更糟糕。
你可以只使用一個事件實現所有關係運算符:
a < b is the base a > b == b < a a >= b == !(a < b) a <= b == !(a > b)
這當然它不是如何在CPU中實現,這是更瑣事。
我嚴重懷疑是否有區別。
- 1. NHibernate [Min(x)]是否大於等於?且不大於或等於?
- 2. RenderPartial和Partial之間是否有任何大的性能差異?
- 3. 大於或小於等於
- 4. JavaScript在等於(==)和三等於(===)之間的性能差異
- 5. 最大和大於SQL之間的性能差異
- 6. 如何檢查兩個列表整數之間的差異是否大於或等於2?
- 7. 創建時間大於或等於
- 8. Flask-SQLAlchemy - 大於或等於
- 9. 如何檢查兩次之間的差異是否大於8.30?
- 10. '大於或等於'和'小於或等於'CODEIGNITER
- 11. 程序檢查整數是否大於,小於或等於
- 12. 用於現有的值或大於或等於
- 13. 更好的做法:少於\大於或等於 - 或少於\大於運算符
- 14. 兩張圖片之間的差異是否大於圖片?
- 15. 如何檢查時間是否大於或小於
- 16. 雙變量條件檢查是否大於或等於?
- 17. 返回否或是,如果時間差大於5分
- 18. 在ggplot中註釋大於或等於
- 19. 大於或等於古怪在AppleScript的
- 20. 「不等於」或「大於」更快?
- 21. 包含等於或大於正確sql
- 22. Sumif日期等於或大於例外
- 23. 的Crystal Reports大於或等於參數
- 24. Jquery Datepicker ToDate大於或等於FromDate
- 25. SQL:刪除大於或等於
- 26. 存儲過濾器大於或等於
- 27. Django的restframework,對大於或等於2parameters
- 28. 大於或等於浮動失敗
- 29. cfqueryparam日期大於或等於
- 30. 指數(從零開始)必須大於或等於零誤差
我對此表示懷疑,如果有的話,它會和貓的鬍鬚差不多。 – 2011-05-30 17:09:04