Browsing Articles Written by

Alvaro Martin

Programming

STL Performance

27 agosto 2010 • By

Atentos a std::move 🙂

http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx

El post habla por si solo. Simplemente tenía curiosidad por saber que había por Google sobre las STL, ya que a mi parecer aunque son Thread Safe, son lentas como contenedores. Depende de con que lo compares son extremadamente rápidas claro. Pero no hay nada como una clase Array con las funciones necesarias. Se nota el aumento de rendimiento pero claro, las STL son diseñadas para un propósito general. La duda me asaltó cuando vi en una issue de la librería de física Bullet, un parche subido con contenedores STL y alguien dijo que el uso de las STL en Bullet era totalmente inaceptable 😀 y claro… si buscas optimización… tiene toda la razón.

No obstante no creo que las STL sean una mala librería, para nada, pero en el mundo del programador de C/C++ nos gusta bastante optimizarlo todo, yo al menos soy bastante friki con estos temas, no como desearía pero lo soy. Con decir que me he llevado 10 años con un PC AMD Athlon XP 1500+ 640MB de memoria y programé ahí mi implementación del Deferred Rendering… xD y siempre ejecutaba todo en DEBUG, si iba mal en debug tocaba iteración de profiling y optimización.

Me encanta C/C++, si bien es cierto que como siempre digo tienes toda la cuerda para hacer lo que quieras, absolutamente todo, pero también tienes la misma cuerda para ahorcarte.

Programming

Ser más listo que el compilador!

28 julio 2010 • By

Estoy empezando a usar COLLADA, investigar, implementarlo en mi motor etc. He dado con una curiosidad en el foro de OpenCOLLADA y es que parece ser que OpenCOLLADA presume de ser el exportador / importador más optimo que existe con mucha diferencia, según los videos de youtube parece que tienen razón, pero yo aun tengo que hacer mis pruebas y sacar mis conclusiones usando 3ds Max 2011.


AutoDesk COLLADA 30 segundos


OpenCOLLADA 10 segundos

No obstante parece que tienen obsesión por adelantarse al compilador o intentar saber más que él. ¿Por qué digo esto? bueno hay ciertas macros de las STL para tener información de debug cuando el programa falla, esto provoca que se haga un “check” de ciertas cosas que obviamente consume CPU. La macro en discordia es _HAS_ITERATOR_DEBUGGING y desarrolladores que lo usan están recomendando el asignar esa macro a cero. Esta macro es bastante básica así que estaba seguro que debía estar incluida en las opciones de compilación del Visual Studio, en concreto /O2, que permite aumentar la velocidad del código en detrimento de información de Debug, cosa que en modo Release no hace falta. Así fue, en un post de Microsoft confirma que esa variable es auto-asignada con el modo de compilación /O2 por medio de otra macro mucho más interesante que la anterior, _SECURE_SCL.

Supongo que cuando a alguien le dio algún error en el código iterando por un vector u otro contenedor de las STL vio esa macro y quiso investigar, seguramente la definió en el proyecto en modo Debug y vio que el rendimiento general de la aplicación aumentó muchísimo. Yo creo que hay que tener bastante precaución con estas cosas, sobre todo y normalmente cuando asignamos las propiedades correctas en el compilador debemos fiarnos de que el equipo de programación es capaz de optimizar más y mejor con una opción que nosotros experimentando.

Graphics, Programming, Video Games

Efficient Sparse Voxel Octrees

14 junio 2010 • By

Hace ya años que se lleva experimentando con el uso de voxels, sobre todo para renderizar contenidos líquidos, donde el voxel es el rey. ZBrush es con voxels, iD tech 5 no, pero anunciaron que tienen ya avanzado el uso de voxels y había imágenes, a día de hoy se sabe que los objetos estáticos del próximo motor de id utilizarán voxels.

¿Por qué tanto voxel? ¿Va a sustituir al renderizado actual (deferred rendering)?
Pues no lo creo, a corto plazo no a no ser que me sorprendan en el E3. Los voxels es la manera de manejar datos de forma eficiente cuando quieres utilizar ray tracing por ejemplo. Aun queda un poco para que podamos renderizarlo todo por ray tracing y obtengamos un frame rate decente. Mientras tanto hay que ir actualizando las arquitectura de los motores e ir investigando sin parar. Nadie sabe si dentro de 1 año alguien conseguirá hacer algo diferente pero lo que está claro es que vamos a leer mucho sobre este tema.

Tengo un paper que miré hace unos 6 años sobre como renderizar nubes realistas y simular la formación y desaparición. Cuando se hizo ese paper no se podía utilizar el programable pipeline y se me ocurrian mil y una maneras de optimizarlo, creo que es mi paper preferido que algún día utilizaré. Bien, este paper proponía utilizar voxels, cubos orientados a la cámara rellenos de un color. El resultado era espectacular y la aniquilación del BUS de la GPU también :). Ahora creo que dentro de un tiempo volveré a recuperar ese paper y me auto-obligaré a ponerme al día sobre los voxels.

Para empezar tenemos lecturas recomendables y a recomendar: