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
- ANSYS R3 2019 incorpora innova... Con la actualización de del software de ANSYS R3 2019, ANSYS ofrece a ingenieros y usuarios nuevas e importantes mejoras en el desarrollo de vehículos autónomos...
- Depurador en circuito para mic... Microchip anuncia el MPLAB® ICD 4, una herramienta de desarrollo para programación y depuración en circuito dirigida a los microcontroladores ...
- Simulador online gratuito de s... Melexis ha presentado su Simulador de Sensores de Corriente, una aplicación web fácil de usar para seleccionar rápidamente los sensores de la cartera IMC-Hall d...
- Software R-Car Virtualization ... Renesas Electronics Corporation presenta el "paquete de soporte de virtualización R-Car" que permite un desarrollo más fácil de los hipervi...
- Aplicación Motor Scan de WEG p... WEG presenta su Motor Scan, un producto que permite la supervisión periódica de los motores de WEG para maximizar el tiempo de funcionamiento y fa...
- Comparador de productos de ele... El distribuidor de componentes electrónicos TME, dispone en su página web de un comparador de productos que facilita comparar al mismo tiempo los ...
- Advantech SUSIAccess 2.0: ahor... Advantech, proveedor de plataformas embebidas y servicios de integración, anuncia el lanzamiento de la versión para Linux de SUSIAccess 2.0, un innovador softwa...
- Software de ingeniería para la... El nuevo software de ingeniería clipx Engineer de Phoenix Contact permite planificar y realizar el pedido de forma eficiente de regleteros de bornas, placas de ...
- Conjunto de herramientas de so... Keysight Technologies Inc. ha presentado la última versión de su conjunto de software para modelado y caracterización de dispositivos l&iac...
- CorelCAD™ 2014, la nueva versi... Corel® anunció presenta CorelCAD™ 2014, la nueva versión de su eficaz y asequible solución CAD. Con sus nuevas funciones CAD estándar del sector y compatibilida...
- La versión 12.1 del software Q... Altera Corporation anuncia la disponibilidad de la versión 12.1 de su software Quartus® II, número uno de su segmento en cuanto a rendimiento y productividad pa...
- 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...