Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Estructuras pequeñas en C++

Iniciado por Pogacha, 14 de Diciembre de 2007, 07:46:24 PM

« anterior - próximo »

ethernet

Cita de: "Pablo Zurita"Yo personalmente me canso de ver programadores hacerse problema por el assembler generado por el compilador cuando los problemas de performance que tienen 99% de las veces están relacionados con los algoritmos en sí.

frase para enmarcar

senior wapo

Que se lo digan a Michael Abrash  :twisted:

Pablo Zurita

Cita de: "senior wapo"Que se lo digan a Michael Abrash  :twisted:
Abrash estaría de acuerdo conmigo probablemente. A diferencia de muchos programadores, Abrash no solo sabe muy bien assembler y las arquitecturas sino que además es muy bueno seleccionando y creando algoritmos. Además los proyectos en los que él trabaja (como Pixomatic) requieren tanta performance del CPU que es sumamente necesario elegir o crear los algoritmos más efectivos y optimizar el assembler al máximo. Abrash debe ser uno de los programadores más talentosos con los que he podido intercambiar información.

senior wapo

Va  más por Ethernet, que ya sabemos de que pie cojea (con todo el cariño)  :P


Citarrequieren tanta performance del CPU que es sumamente necesario elegir o crear los algoritmos más efectivos y optimizar el assembler al máximo

Ahi quería llegar yo: "Y".

Pogacha

En tratamiento de imagenes, no te queda otra, muchos de los algoritmos son lineales pero de todas formas el volumen de información a tratar es alto.

Una clase como esta:template<typename T, int B> class Fixed {
     T t_;
  public:
     Fixed<T,B> operator+(const Fixed<T,B>& f) { return Fixed<T,B>(f.t_+t_); }
   ...
};
Podria compilar bien en algunos casos pero en otros no estoy seguro y la ganancia minima que tendrias frente al float la perderias por problemas de compilación.

Estaba buscando un ejemplo de codigo con el que me estuve peleando hace mas de un año pero no lo encontré.
Era un inner loop que tenia muchas variables, (12 o 13 quizas) y el compilador (VC6.0 que no es gran cosa), me generaba codigo que usaba solo 3 o 4 registros y las demas variables todas en el stack. Cuando lo ví me horrorizé y lo rescribí para que las variables mas usadas esten en registros, también baje en como 5 o 6 intrucciones al loop acomodandolo para que haya pairing (que las instrucciones continuas no tengan dependencias) y mi sorpresa fue que andaba ligeramente mas lento y me tuve que resignar, supongo que mi error habrá estado en como accedia a la memoria de datos y cuando escribía en ella, pero no tengo información sobre esto.

En realidad no es que me muera de angustia por optimizar nada, pero me gustaria saber que pasa con estas clases, pues siempre dudo en como estructurar el codigo y termino buscando otra solución alternativa a esto.

Según parece entonces no hay garantias de como valla esto a ser compilado, por mas que lo que quiero es sobrecargar un tipo interno.

De todas formas, tengo un mejor panorama y probablemente pruebe en algunos casos a ver que sale.

Saludos

ethernet

Cita de: "senior wapo"Va  más por Ethernet, que ya sabemos de que pie cojea (con todo el cariño)  :P


Citarrequieren tanta performance del CPU que es sumamente necesario elegir o crear los algoritmos más efectivos y optimizar el assembler al máximo

Ahi quería llegar yo: "Y".

Para casos muy muy concretos, ya sabes el dicho de la excepción que confirma la regla.

A lo largo de mi vida como programador (que no es mucha) he visto muchísimas personas que valoran mucho aspectos técnicos del lenguaje, "si hago tal o cual cosa con java optimizo un 40%" es una frase típica y con esa corta experiencia me he dado cuenta que las personas que piensan demasiado en eso terminan pegándosela en los proyectos.

Optimizar es difícil y solo se puede hacer cuando se tiene mucha experiencia en algo. En absolutamente todas las áreas funciona así, no creo que los ingenieros que diseñan los coches piensen en optimizar al máximo el consumo desde el comienzo... el problema es que los informáticos se creen superhombres :)

Pogacha, siento el offtopic :)

[EX3]

Yo creo que hoy dia con el hardware actual al que accede cualquier persona de a pie y las herramientas super-asistidas y automatizadas de las que disponemos para programar, la optimizacion a tan bajo nivel en muchos casos no nos deberia preocupar, o en todo caso, dejar dicha tarea para el final, por que quizas luego puede que no merezca la pena llegar a tal punto.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

josette

puedes probar a ver el codigo ensamplador que genera tu compilador de esa estructura, al pasarla por parametro. creo que eso despejara toda duda. y comprobar si hay cambios al hacer una cosa u otra.

josette

puedes probar a ver el codigo ensamplador que genera tu compilador de esa estructura, al pasarla por parametro. creo que eso despejara toda duda. y comprobar si hay cambios al hacer una cosa u otra.

Pogacha

OK, pero lo que no quiero es escribir 2 semanas de codigo y luego decir ok no anduvo ... o peor aun, escribir 2 sermanas de codigo, que todo ande bien, y que dos meses despues a unos dias de un milestone, en la ultima ampliación de su funcionalidad me tire abajo todo.
Yo quiero saber y estar seguro de lo que hago.

Saludos!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.