Представлен Halide, новый язык программирования для обработки изображений
Исследователи из Массачусетского технологического института представили новый язык программирования Halide, специально разработанный для упрощения разработки приложений, обрабатывающих графические изображения. Halide является предметно ориентированным языком, предназначенным для достижения максимальной эффективности при обработке основных типов графических файлов, например в таких типовых графических операциях, как обработка raw-изображений, фильтрация Лапласа, сегментация изображения и т.п.
Технически - это язык прототипов на базе C++, который допускает своё использование в двух режимах: выполнение встроенных в приложение функций на языке Halide через использование JIT-компиляции; либо компиляция в отдельный объектный файл, который может впоследствии быть подключен в стороннюю программу, например посредством добавления простейшего заголовка-ссылки на этот файл при компиляции.
Исследователи говорят, что легкость чтения и восприятия более высокоуровневого языка Halide не единственное его отличие от обычных языков программирования. Что более важно, Halide также автоматизирует оптимизацию машинного кода под ресурсоёмкие графические операции, на что в противном случае потребовались бы часы весьма непростой работы, и даже в случае полной ручной оптимизации вряд ли результат был бы лучше по сравнению с Halide. Разработчики языка переписали на Halide некоторые общедоступные графические библиотеки и обнаружили, что версия на языке Halide, как правило, в три раза меньше по размеру и в 6 раз быстрее по производительности. Сами исследователи объясняют такой скачек производительности активным использованием самых современных технических возможностей, главным образом использованием эффективного распараллеливания процессов.
Проект написан на языке C++ с использованием элементов нового стандарта C++11, поэтому для его компиляции требуется как минимум gcc 4.6. На данный момент Halide адаптирован для следующих платформ: x86-64/SSE, ARM v7/NEON и CUDA. Язык поддерживает блоки SIMD, многоядерные процессоры, сложно-иерархическую память. Поддерживается сборка для Mac OS X и Linux (Ubuntu 12.04). Исходные тексты проекта открыты под лицензией MIT.