Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

martes, 23 de diciembre de 2008

Precaución, amigo conductor...

... tu enemigo es la velocidad... Vale, vale, ya me callo. Se vaya a liar a llover justo en Nochebuena y la liemos :) . El caso es que el título viene muy al caso para lo que quiero contaros hoy.


Aprovechaba un momento de solaz, días atrás, para echar un vistazo a un MSDN Magazine que me había pasado un amigo, y veía en el mismo cómo para la próxima versión de Visual Studio, que llegará a nuestras manos allá por 2010, trae “de serie” algunas de las herramientas y librerías con las que Microsoft nos está dejando jugar a través de Microsoft Research y sus proyectos beta. Entre otras, podíamos ver hace unos días y pocas entradas atrás, cómo Pex ya permite su integración con VS2008 y VS2010, y a esto podemos sumarle un sistema de depuración y pruebas en programación concurrente en el que, imagino, bastante tendrá que decirnos el equipo que está desarrollando CHESS, y que permite incluso depurar las aplicaciones sabiendo en cada momento sobre qué núcleo está corriendo cada hilo de las mismas, tener en cuenta la ocupación del mismo y comprobar todo tipo de condiciones de carrera para evitar que lleguen a producirse, pongamos por ejemplo, interbloqueos durante su ejecución.


A lo que iba (que ya comienzo a divagar) es que VS2010 dará un soporte importante a la programación multihilo, como venía diciendo, incorporando herramientas de interés para los desarrolladores de este tipo de sistemas. Y al hilo de esto (chiste malo :P), he de comentar que estuve echando un vistazo a la librería Accelerator, que Microsoft lanzó hace algo más de un año, aunque sigue en desarrollo y, obviamente, en beta. Su interés fundamental es permitir el desarrollo de aplicaciones en .NET que sean capaces de aprovechar el potencial de cálculo de las modernas GPUs (¿recordáis hace unos meses las noticias sobre ruptura de cifrados a través de fuerza utilizando estos dispositivos?). La verdad es que su uso es bastante simple, como todo lo que nos llega desde Redmond, y básicamente se trata de incluir una referencia a la librería de Accelerator en nuestro proyecto de Visual Studio y empezar a trabajar con ella. Eso sí, la tarjeta gráfica que usemos deberá ser compatible con DirectX9 y tener soporte para Pixel Shader 2.0, como mínimo. Esto es así porque las operaciones parelas con datos a código optimizado para la GPU y llamadas a la API correspondiente, permitiendo así una ejecución mucho más rápida de dichos cálculos. La librería Accelerator (en concreto, el espacio de nombres Microsoft.Research.DataParallelArrays) incorpora varios tipos de datos nuevos, como son el FloatParallelArray, IntParallelArray o BoolParallelArray, con operadores aritméticos sobrecargados para los mismos.


Obviamente, el uso más indicado para esta librería es, aparte de los cálculos relacionados con temas gráficos como el renderizado de imágenes u operaciones con objetos en 3D, el de llevar a cabo operaciones complejas que requieran cálculos matemáticos exhaustivos o muy precisos a una velocidad considerable. De este modo, la GPU puede constituir un soporte muy eficiente para la CPU, sea esta última multinúcleo o no.


Para finalizar, ya que trato el tema de la CPU, y volviendo al comienzo del artículo, me ha llamado la atención el publicado por Rodrigo Corral bajo el título ¡La broma ha terminado!, en el que reflexiona sobre el fin de la Ley de Moore, y cómo a partir de ahora los desarrolladores deberemos preocuparnos un poco más sobre cómo se ejecutan nuestras aplicaciones en el hardware disponible. De ahí que Microsoft y compañía se preocupen tanto de proporcionarnos ahora este tipo de herramientas, vengan incluidas en los frameworks, sean librerías externas, o lleguen de la mano de nuestro IDE preferido.

2 comentarios:

  1. Como decís tú y Rodrigo, el hardware tiene un límite, con lo que tendremos que empezar a optimizar (más si cabe) el código que desarrollamos ;-), otra vuelta de tuerca más. Así todo, muy crítica en rendimiento y tiempo tiene que ser la aplicación como para meterse en estos fregaos de computación paralela, ¿no crees?

    Gracias por la referencia al proyecto Accelerator, puede que les venga muy bien a unos compañeros que están intentando sacar chispas a la capacidad de cálculo adicional de las GPUs.

    SaludoX.

    ResponderEliminar
  2. Muy buenas, tocayo :)

    La verdad es que sí, hasta la fecha el avance imparable del hardware ha hecho que los desarrolladores nos durmamos un poco en los laureles en cuanto a la optimización de nuestro código. Con maravillas como La Abadía del Crimen no ocurrían estas cosas, muy posiblemente porque el hardware era un elemento limitante que estaba siempre presente. Ahora nos ha llegado el turno de optimizar nuestro código. Coincido, no obstante, contigo en que mucho hay que necesitar optimizar para meterse a trabajar con temas de computación paralela, y es algo a lo que posiblemente muchos desarrolladores no tengan que enfrentarse, sobre todo si se desarrollan aplicaciones de gestión "usuales". Pero a poco que te metas más en sistemas, ya sea por desarrollar sistemas operativos, drivers o componentes que deban optimizar mucho el rendimiento, proyectos como Accelerator o herramientas como la depuración multicore de VS2010 te vendrán de perlas si no queremos vernos inmersos en el apasionante mundo del desarrollo en ensamblador, jejeje :D

    ¡Salud!

    ResponderEliminar