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
- Software de impresión 3D integ... La empresa de software germano-francesa CoreTechnologie (CT) se ha unido al consorcio industrial 3MF y ha optimizado la última versión de su software de impresi...
- Biblioteca TwinCAT PLC para IE... Para estandarizar las comunicaciones de equipos en parques eólicos, el software de automatización TwinCAT de Beckhoff es compatible con el protocolo de comunica...
- Selección de LEDs, varistores ... Würth Elektronik eiSos ha ampliado las posibilidades de aplicación de su software de simulación gratuito REDEXPERT. A partir de ahora, los LE...
- Microchip Trust Platform Desig... Microchip Technology anunció en 2019 su Trust Platform para su familia CryptoAuthentication™, que proporciona las primeras soluciones preconfiguradas de la indu...
- Software de diseño 3D XYZmaker XYZprinting presenta el XYZmaker, su nueva solución de software para modelado en 3D. Concebido para poder ser usado por un principiante, este softw...
- Arquitectura de software para ... Uno de los primeros sistemas informáticos incorporados a un automóvil fue el ordenador de navegación en el Cadillac Seville de 1978, controlado mediante un micr...
- SOLIDWORKS 2020 diseñado para ... Dassault Systèmes ha presentado SOLIDWORKS 2020, la última versión de su portfolio de aplicaciones de diseño e ingeniería en 3D. Al conectarse con la plataforma...
- Microchip simplifica su línea ... Microchip ha simplificado su línea de compiladores C, que proporcionan la mejor velocidad de ejecución y el mejor tamaño de código para los aproximadamente 900 ...
- Herramienta gráfica BIOS Wizar... Advantech ha anunciado BIOS Wizard, una potente herramienta que permite la configuración rápida de UEFI BIOS y la personalización de proyectos de desarrollo de ...
- Versión 3.0 del software profe... RS Componentes (RS) ofrece de forma gratuita la versión 3.0 del software profesional DesignSpark PCB. Este nuevo software desarrollado por RS conjuntamente con ...
- Software de compresión "To-Go"... SEGGER anuncia emCompress-ToGo, un nuevo miembro de la familia de software de compresión emCompress. Ahora con 3 productos, SEGGER cree que tiene la solu...
- Software de análisis de potenc... Keysight Technologies, Inc ha anunciado un nuevo software de análisis de potencia basado en eventos que ayuda a optimizar la duración de la batería de los dispo...