El software de escritura de gráficos se hace mucho más fácil
Un nuevo lenguaje de programación para algoritmos de proceso de imágenes ofrece código mucho más corto y más claro - pero también más rápido.
El software de proceso de imágenes es una tendencia: basta con mirar a Instagram, una compañía construida alrededor del proceso de imágenes que Facebook está tratando de comprar por 1000 millones de dólares.
El proceso de imágenes también va al móvil, a medida que más y más personas están enviando fotos de teléfonos móviles directamente a la Web, sin transferirlas primero a un ordenador.
Al mismo tiempo, los archivos de fotos digitales se están haciendo tan grandes que, sin un montón de ingeniería de software inteligente, procesarlas tomaría un tiempo terriblemente largo en un ordenador personal, y mucho menos en un teléfono móvil. Por desgracia, los trucos que utilizan los ingenieros para acelerar sus algoritmos de proceso de imágenes hacen su código casi ilegible, y raramente reutilizable. Añadir una nueva función a un programa de proceso de imágenes, o modificarlo para que se ejecute en un dispositivo diferente, a menudo requiere estudiarlo de nuevo y revisarlo de arriba a abajo.
Los investigadores del MIT's Computer Science and Artificial Intelligence Laboratory (CSAIL) ayudan a cambiar esto, con un nuevo lenguaje de programación llamado Halide. No sólo los programas Halide son más fácil de leer, escribir y revisar que los programas de proceso de imágenes escritos en un lenguaje convencional, sino porque Halide automatiza los procedimientos de optimización de código que normalmente necesitarían horas para realizarse a mano, y también son significativamente más rápidos.
En las pruebas, los investigadores del MIT utilizan Halide para reescribir varios algoritmos comunes en el proceso de imágenes, cuyo rendimiento había sido optimizados ya por programadores experimentados. Las versiones de Halide eran por lo general más de un tercio del largo pero ofrece importantes mejoras de rendimiento - dos, tres o incluso seis veces más rápido. En un caso, el programa Halide era realmente más largo que el original - pero el aumento de velocidad era de 70 veces mayor.
Jonathan Ragan-Kelley, un estudiante graduado en el Departamento de Ingeniería Eléctrica y Ciencias de la Computación (EECS), y Andrew Adams, un posdoctorado CSAIL, dirigió el desarrollo de Halide, y han lanzado el código online. En el Siggraph, la primera conferencia sobre gráficos, se ha presentador una ponencia sobre Halide, que él co-escribió con los profesores de ciencia informática del MIT Saman Amarasinghe y Fredo Durand y con colegas de Adobe y de la Universidad de Stanford.
Canalización paralela
Una razón por la que el proceso de la imagen es tan computacionalmente intensiva es que generalmente requiere una sucesión de operaciones discretas. Después de que la luz incide en el sensor de la cámara de un teléfono móvil, el teléfono "peina" los datos de la imagen para encontrar valores que indican mal píxeles de sensor en mal funcionamiento y los corrige. A continuación se correlaciona las lecturas de píxeles sensibles a diferentes colores para deducir los colores reales de las áreas de imagen. Luego se hace un poco de corrección de color, y algo más de ajuste de contraste, para hacer que los colores correspondan mejor a lo que el ojo humano ve. En este punto, el teléfono ha hecho un proceso tan elevada que se necesita otro paso para limpiar los datos.
Y eso es sólo para mostrar la imagen en la pantalla del teléfono. El software que hace algo más complicado, como la eliminación de ojos rojos, o suavizado de las sombras, o aumentar la saturación de color, o hacer que la imagen se vea como una vieja foto Polaroid, introduce aún más capas de proceso. Además, las modificaciones de mayor nivel, requieren de software para ir a etapas anteriores, y volver a calcular en el canal.
En los chips de varios núcleos de hoy en día, la distribución de diferentes segmentos de la imagen a los núcleos trabajando en paralelo, puede hacer más eficiente el proceso de imágenes. Sin embargo, la forma normal en que se produce el proceso en paralelo, tras cada paso en el canal de proceso de imágenes, los núcleos podrían enviar los resultados de sus cálculos de nuevo a la memoria principal. Debido a que la transferencia de datos es mucho más lenta que el cálculo, esto puede anular todas las mejoras de rendimiento que ofrece la paralelización.
Así que los ingenieros de software tratan de mantener todos los núcleos individuales ocupados durante el mayor tiempo posible antes de tener que enviar sus resultados a la memoria. Esto significa que los núcleos tienen que ejecutar varios pasos en el canal de proceso en sus porciones de datos separadas, sin agregar sus resultados. Hacer un seguimiento de todas las dependencias entre los píxeles que se están procesando en núcleos separados es lo que hace tan complicado el código para proceso eficiente de imágenes. Además, los trade-offs entre el número de núcleos, la potencia de proceso de los núcleos, la cantidad de memoria local disponible para cada núcleo, y el tiempo que se necesita para mover los datos fuera del núcleo, varía de una máquina a otra, por lo que un programa optimizado para un dispositivo puede no ofrecer ventajas de velocidad en uno diferente.
Divide y vencerás
Halide no le ahorra al programador de pensar en cómo paralelizar eficientemente en algunas máquinas, sino que divide el problema fuera de la descripción de los algoritmos de proceso de imágenes. Un programa Halide tiene dos secciones: una para los algoritmos, y una para el "calendario" de proceso. El calendario puede especificar el tamaño y la forma de las porciones de imagen que cada núcleo necesita para procesar en cada parte del canal de proceso, y se puede especificar dependencias de datos - por ejemplo, que los pasos que se ejecutan en núcleos particulares deberán tener acceso a los resultados de los pasos anteriores en distintos núcleos. Una vez que el calendario está elaborado, sin embargo, Halide maneja toda la "contabilidad" de forma automática.
Un programador que quiere exportar un programa a otro equipo sólo cambia el calendario, no la descripción del algoritmo. Un programador que desea agregar una nueva fase de transformación al canal de proceso, sólo se conecta en una descripción del nuevo procedimiento, sin tener que modificar los ya existentes. (Un nuevo paso en el canal, requerirá una especificación correspondiente en el calendario).
"Cuando se tiene la idea de que es posible que desee poner en paralelo algo de cierta manera o etapas de utilización de cierta manera, cuando se escribe esto de forma manual, es muy difícil expresar la idea correcta", dice Ragan-Kelley. "Si tienes una nueva idea de optimización que quieres aplicar, lo más probable es que pases tres días depurandolo porque lo hayas roto en el proceso. Con esto, cambias una línea que expresa esa idea, y se sintetiza lo correcto. "
Aunque los programas de Halide son más fáciles de escribir y de leer que los programas normales de proceso de imágenes, ya que la programación se maneja automáticamente, frecuentemente ofrecen mejoras de rendimiento incluso sobre el código más cuidadosamente diseñado de forma manual. Por otra parte, el código Halide es tan fácil de modificar que los programadores simplemente podría experimentar con ideas mal concebidas para ver si mejoran el rendimiento.
"Usted puede simplemente trastear alrededor y probar cosas diferentes al azar, y encontrará a menudo algo muy bueno", dice Adams. "Sólo mucho más tarde, cuando lo haya pensado mucho, averiguará por qué es bueno".
# # #
Escrito por Larry Hardesty, MIT News Office
Articulos Electrónica Relacionados
- Robust Control Toolbox y Simul... MathWorks dispone de nuevas versiones de dos productos, Robust Control Toolbox y Simulink Control Design, que permiten a los ingenieros ajustar automá...
- Viewer de SnapEDA con más de 2... Amphenol Communication Solutions y SnapEDA presentan 21.000 modelos digitales nuevos para ayudar a los ingenieros a lanzar sus productos al mercado más rápido. ...
- Software CAD gratuito para cir... RS Components (RS) y Allied Electronics (Allied), marcas comerciales de Electrocomponents plc han presentado en Madrid, el software gratuito DesignSpark Electri...
- Sysmac Studio Team Edition con... Omron presenta Sysmac Studio Team Edition, una importante actualización de su entorno de desarrollo de máquina que ofrece a los desarrolladores un...
- Dassault Systèmes lanza una nu... Dassault Systèmes anuncia el lanzamiento de una nueva experiencia de solución industrial para el segmento de la automoción: “Smart, Safe & Connected Car”, u...
- FORTE, nueva y revolucionaria ... Mouser Electronics, Inc. se complace en anunciar la herramienta inteligente de lista de materiales FORTE de Mouser. FORTE es una herramienta de gestión i...
- App Iphone Grid-EYE de Panason... Panasonic Automotive & Industrial Systems Europa anuncia el lanzamiento de su App Grid-EYE para iOS, que permite la captura de datos del kit de evaluaci&oac...
- Máquina virtual Java de 28 Kb... La máquina virtual Java (JVM) más pequeña de la industria, arranca rápidamente en 2ms a 120 MHz, usa menos de 1,5 Kb RAMEl fabricante francés de plataforma Java...
- AUTOSAR Target Production Pack... MathWorks lanza AUTOSAR Target Production Package, un paquete de apoyo flexible destinado a los ingenieros de automoción que necesiten utilizar las capacid...
- Paquete de homologación DO-178... PRQA | Programming Research, proveedor de soluciones de conformidad para estándares de codificación, dispone de un paquete de homologación DO-178B para QA·C, di...
- Protección de software y gesti... CodeMeter CodeMeter realiza una protección integra, dicha protección es tan buena como flexible en el licenciami...
- Emulador que contribuye a redu... Renesas Electronics ha anunciado el E2 Emulator, un emulador de depuración de nueva generación. El E2 está destinado a ser un entorno de de...