› Foros › Multiplataforma › Desarrollo
Trabis escribió:Un compilador como GCC o Microsoft C, está hecho por gente mucho más inteligente que yo, y por lo tanto, genera un código mucho, mucho, mucho más eficiente, de lo que yo jamás podría conseguir mediante código ensamblador.
theelf escribió:
Bueno, gcc va a generar en funcion a lo que escribas, asi que a menos que la pifies muy mal en ensamblador, siempre va a ser mejor tu codigo en asm, que el generado basado en uno que escribieras en C
Trabis escribió:theelf escribió:
Bueno, gcc va a generar en funcion a lo que escribas, asi que a menos que la pifies muy mal en ensamblador, siempre va a ser mejor tu codigo en asm, que el generado basado en uno que escribieras en C
Un ejemplo sencillo para que nos entienda la gente:
Si yo por ejemplo en un código de C/C++ divido o multiplico por una potencia de 2 como por ejemplo 8, entonces un compilador como GCC que es muy inteligente y genera código muy optimizado, se dará cuenta que en vez de utilizar las caras dividir o multiplicar, puede utilizar en cambio un desplazamiento de bits que es mucho más rápido o eficiente. Si por ejemplo declaras una variable y no la utilizas, pues el compilador se da cuenta. Quien dice eso dice utilizar los registros cuando se pueda, o utilizar las funciones SIMD cuando trabajas con 4 floats juntos o miles de cosas más.
Como actives la opción optimizar al máximo en esos compiladores ,estos te generan unas optimizaciones absolutamente locas.
alkaitz escribió:
Esto es un debate bastante curioso. Lo que dices tiene razon, en el sentido bruto de la palabra, y es asi a un nivel muy concreto. El compilador puede asumir muchisimas cosas y verificar tantas otras para optimizar valores, pero no tiene un dato muy valioso: el contexto. El programador, si sabe lo que hace, es siempre consciente del contexto de lo que hace. En que momento esta, como distribuye sus datos, como optimiza ciertas rutinas. El compilador hace lo que puede, y lo hace muy bien, pero cuando tu defines dos estructuras de datos el compilador no tiene una referencia concreta de como vas a acceder a ellas, a veces si a veces no. Tu, como programador, si que puedes saberlo y organizar la estructura para optimizar lecturas de cache, por ejemplo. Memoria principal puede ser 100 o 200 veces mas lenta que una cache y el flujo de ejecucion de un programa, sobre todo cuando tiene punteros, es altamente complicado para optimizaciones buenas.
Con esto quiero decir que hacer algo en ensamblador mejor que un compilador es posible, muy posible. Hacer un navegador web mejor que un compilador no, pero ciertas tareas localizadas en las que el programador aplica contexto y estructura lo que hace en base a rendimiento si. Los compiladores mejoraran con el tiempo, pero aun no tienen la capacidad humana de conocer y extrapolar situaciones en base a informacion independiente del contexto.
Un saludo gente!
PS Perdon por la falta de tildes!