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
- IAR Embedded Workbench ofrece ... IAR Systems® lanza la versión 7.30 de IAR Embedded Workbench® para ARM® con soporte completo para el nuevo núcleo de procesador ARM Cortex®-M7. El procesador br...
- Herramienta de referencias cru... "Según el proveedor de asistencia para compras operativas AdOpas, los costes de aplicaciones pueden ser indexados hasta +/- 50% sobre la base de la...
- Siemens Simcenter 3D ahora inc... Siemens presenta la última versión de Simcenter 3D, su entorno estrella para la ingeniería multidisciplinar asistida por ordenador (CAE). S...
- Los usuarios de Google Home pu... Z-Wave Europe ha anunciado la oportunidad de controlar sus dispositivos con el firmware para el hogar inteligente a través del control por voz de Google ...
- IAR Embedded Workbench certifi... IAR Systems ®, proveedor mundial de herramientas de desarrollo para sistemas embebidos, ha anunciado que la cadena de compilación del conjunto de herramientas d...
- IAR Systems proporciona soport... IAR Systems® anuncia que el apoyo inicial para la nueva tecnología EnergyTrace de Texas Instruments está disponible en el líder mundial en el desarrollo conjunt...
- La biblioteca de modelos CAD e... RS Components (RS) ha anunciado que su extensa biblioteca con modelos CAD en 3D ya incluye más de 75.000 modelos de componentes RS Pro. Así los in...
- NECTO Studio 6.0: mayor funcio... MikroElektronika (MIKROE) ha presentado la versión 6.0 de NECTO Studio, el entorno de desarrollo integrado multiplataforma (IDE) de la empresa para aplicaciones...
- Software para control y ajuste... Power Integrations presenta su software Motor-Expert, una aplicación de código "C" embebido, una biblioteca y una interfaz gráfica de usuario de control que per...
- Aplicación portatil de selecci... Powerbox ha anunciado el lanzamiento de la primera aplicación de selección de productos portátil de Cosel, desarrollada para funcionar en t...
- 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...
- Herramienta de diseño on line ... Würth Elektronik eiSos ha lanzado al mercado RED EXPERT, una nueva herramienta en línea que permite a los desarrolladores realizar simulaciones con los inductor...