En los procesadores modernos de hoy en día, ¿hay alguna diferencia de rendimiento entre una comparación mayor que y mayor que o igual para una condición de bifurcación? Si tengo una condición que podría ser igual de fácil, ¿hay alguna ligera ventaja al elegir >
sobre >=
o viceversa? (Esto sería para un lenguaje compilado en hardware Intel o AMD)¿Hay alguna diferencia de rendimiento entre mayor que y mayor que o igual?
Respuesta
No debería haber ninguna diferencia notable entre la comparación de diferentes predicados, debido a la forma en que se calculan (cuidado que no he leído los manuales de x86 en detalle por lo que puede trabajar es diferente):
mayoría de las instrucciones produce varias banderas como subproducto, generalmente tiene al menos: acarreo (c), desbordamiento (o), cero (z) y negativo (n).
Usando esos predicados que son creados por una instrucción x-y (que crea los 4 anteriores de manera confiable) podemos deducir fácilmente todas las comparaciones deseadas trivialmente. Para números sin firmar:
x = y z
x != y !z
x < y !c
x <= y !c + z
x > y c . !z
x >= y c
Por lo tanto, apenas hace ninguna diferencia. Pero luego hay algunas diferencias, que casi siempre se reducen al hecho de que podemos usar TEST (que es AND y no una sustracción completa) o tener que usar CMP (esa es la resta). TEST es más limitado pero más rápido (generalmente).
También las arquitecturas modernas (comenzando desde c2d en el lado intel) a veces pueden fusionar dos μops en una macro operación, llamada fusión macro-op que tiene algunas bonitas ventajas. Y las reglas para eso cambian de una arquitectura a la siguiente y son un poco más largas. Por ejemplo, las ramas que prueban el desbordamiento, la paridad o la bandera de señal solamente (JO, JNO, JP, JNP, JS, JNS) pueden fusionarse con TEST, pero no con CMP en c2d y nehalems (you bet I looked that one up - section 7.5).
Entonces, ¿podemos decir que es complicado y no preocuparse por tales cosas? Eso es, excepto si está escribiendo un optimizador para un compilador, porque realmente, independientemente de lo que escriba en su código fuente, el compilador hará lo que quiera de todos modos, y por una buena razón (es decir, si JGE fuera teóricamente más rápido, tendría para escribir if (x < y) generalmente ..). Y si realmente necesita un consejo: Comparar contra 0 es a menudo más rápido.
No estoy muy seguro de cómo se realiza la implementación subyacente en la ALU/FPU, pero solo debería haber una operación para todos ellos (en tipos primitivos es decir)
Realmente espero que esto sea solo una pregunta porque tiene curiosidad y no está tratando de optimizar, esto nunca le dará un gran aumento de rendimiento y muy probablemente su código contendrá muy lejos peores problemas de rendimiento.
Puede evento implementar todos los operadores de relación con una sola:
a < b is the base a > b == b < a a >= b == !(a < b) a <= b == !(a > b)
Esto por supuesto no es la forma en que está implementado en la CPU, esto es más trivia.
Tengo serias dudas de que haya una diferencia.
- 1. Uso "mayor o igual" o simplemente "mayor que"
- 2. Double.Epsilon por la igualdad, mayor que, menor que, menor que o igual a, mayor que o igual a
- 3. fecha igual o mayor que el de hoy en MySQL
- 4. MySQL mayor o igual que el operador está ignorando su obligación o igual a
- 5. sql usos de "menor que o igual a" & "no mayor que"
- 6. Mayor que menos, python
- 7. JavaScript triplicar mayor que
- 8. Scala ~> (tilde mayor que)
- 9. ExitCodes mayor que 255, posible?
- 10. MySQL Query, seleccione mayor que
- 11. ¿000,000,000.00 es mayor que cero?
- 12. Lucene.Net mayor que/menor que TermRangeQuery?
- 13. ¿Hay alguna diferencia (de rendimiento) entre Depurar y Liberar?
- 14. Comparación de fechas de rieles; fecha mayor o igual que hace días
- 15. ¿Hay alguna diferencia de rendimiento entre myCollection.Where (...). FirstOrDefault() y myCollection.FirstOrDefault (...)
- 16. ¿Hay nulo mayor que cualquier tipo de datos de fecha?
- 17. WPF Disparador que funcionaría si el valor es igual o mayor
- 18. menos el porcentaje mayor que vs porcentaje mayor que (es decir, -%> vs%>)
- 19. lista de Python mayor que el número
- 20. ¿Cómo implementar la declaración SQL mayor o igual en iBatis?
- 21. HTML: ¿Debería codificar mayor que o no? (> >)
- 22. Comparación de Java Integer: mayor que
- 23. ¿Cómo obtener DataTemplate.DataTrigger para buscar mayor o menor que?
- 24. igualdad de Javascript igualdad triple pero ¿qué hay de mayor que y menor que?
- 25. Uso del símbolo mayor que en XML
- 26. CSS ancho dinámico mayor que 100%
- 27. timediff es mayor que 2 minutos
- 28. WPF VirtualizingStackPanel para un mayor rendimiento
- 29. Codeigniter Registro activo: mayor que el enunciado
- 30. Comparar si BigDecimal es mayor que cero
Lo dudo, y si lo hubiera, sería tanto como el bigote de un gato. –