He notado que mi aplicación nds funciona un poco más rápido cuando reemplazo todas las instancias de bytes con enteros. todos los ejemplos en línea ponen instancias u8/u16 siempre que sea posible. ¿Hay alguna razón específica sobre por qué este es el caso?¿Por qué los enteros procesan más rápido que los bytes en NDS?
Respuesta
El procesador principal que utiliza la Nintendo DS es ARM9, un procesador de 32 bits.
Referencia: http://en.wikipedia.org/wiki/ARM9
Normalmente, la CPU realizará operaciones en word sizes, en este caso, 32 bits. Dependiendo de sus operaciones, tener que convertir los bytes hasta enteros o viceversa puede estar causando tensión adicional en el procesador. Esta conversión y la posible falta de instrucciones para valores distintos a los enteros de 32 bits pueden estar causando la falta de velocidad.
Complementario a lo que dijo Daniel Li, el acceso a la memoria en plataformas ARM debe estar alineado con las palabras, es decir, las búsquedas de memoria deben ser múltiples de 32 bits. Obtener una variable de byte de la memoria implica recuperar la palabra completa que contiene el byte relevante y realizar las operaciones de bits necesarias para ajustarla en los bits menos significativos del registro del procesador.
Estas instrucciones adicionales son emitidas automáticamente por el compilador, dado que conoce la alineación real de sus variables.
- 1. ¿Por qué los programas de estilo rápido son más cortos que los programas de estilo defensivo?
- 2. ¿Por qué los bytes enteros se almacenan al revés? ¿Esto se aplica solo a los encabezados?
- 3. ¿Por qué los pandas se fusionan en Python más rápido que data.table combina en R?
- 4. ¿Por qué Java no ve que los enteros son iguales?
- 5. ¿Cómo se convierten los enteros en bytes en Java?
- 6. ¿Por qué \% (\) es más rápido que \ (\) en Vim?
- 7. ¿Por qué el dibujo en gráficos OnPaint es más rápido que los gráficos de imagen?
- 8. ¿Por qué es === más rápido que == en PHP?
- 9. ¿Por qué no hay un registro que contiene los bytes más altos de EAX?
- 10. Por qué los subprocesos POSIX son más lentos que OpenMP
- 11. Qt: ¿Los eventos se procesan en orden?
- 12. ¿Por qué compila C# mucho más rápido que C++?
- 13. ¿Por qué MSMQ es más rápido que WCF QueueService?
- 14. ¿Por qué file_get_contents es más rápido que memcache_get?
- 15. ¿Por qué String.IsNullOrEmpty es más rápido que String.Length?
- 16. ¿Por qué i = i + 1 es más rápido que i ++?
- 17. ¿Por qué es Select 1 más rápido que Select count (*)?
- 18. ¿Por qué un div y un botón con los mismos estilos se procesan en diferentes tamaños?
- 19. Por qué unir es más rápido que la concatenación normal
- 20. Por qué Array.reverse_each es más rápido que Array.reverse.each
- 21. ¿Por qué el mapa sería mucho más rápido que unordered_map?
- 22. Lenguaje más rápido para los bucles FOR
- 23. ¿Cómo hacer que los fragmentos se carguen más rápido?
- 24. ¿Por qué la comparación de enteros es más rápida que la comparsión de cadenas?
- 25. Por qué Java OutputStream.write() Toma de enteros pero escribe Bytes
- 26. ¿Cuál es más rápido y por qué?
- 27. ¿Es + = más rápido que - =?
- 28. Buffer vs String speed: ¿Por qué String es más rápido?
- 29. Más rápido que String.Replace()
- 30. x86_64: ¿Por qué es uint_least16_t más rápido que uint_fast16_t (para la multiplicación)
¿Puedes dar un ejemplo de código específico? Sospecho que estás viendo ejemplos que declaran variables de 8/16 bits en estructuras, y en cambio las estás usando como locales. –