Intel Integrated Performance Primitives

Немного о Intel Integrated Performance Primitives (IPP)

Intel IPP - это набор кросс-платформенных библиотек, содержащих большое количество высокопроизводительных функций, которые могут быть использованы для аудио-, видео-кодеков (например, H.263, MPEG-4), сжатия изображений (JPEG и JPEG2000), обработки изображений (двумерных массивов), обработки сигналов (одномерных массивов или векторов), сжатия естественной речи, систем компьтерного зрения, криптографических приложений, а также вспомогательные математические функции. Необходимость создания такого набора функций напрямую вытекает из современных реалий разработки прикладного программного обеспечения:

  • существует определённый набор вычислительно сложных функций, которые требуются для приложений;
  • разработчики вынуждениы производить тщательную оптимизацию этих функций для получения необходимой производительности;
  • процесс оптимизации сложен и занимает длительное время.

Действительно, многим разработчикам требуется реализовать одну и ту же функциональность. А с ростом количества аппаратных платформ доля низкоуровневых (ассемблерных) реализаций уменьшилась значительно. Intel IPP содержит набор низкоуровневых процедур, которые позволяют эффективно исполняться мультимедийным инструкциям на любом процессоре.

Структура Intel IPP

Примитивы в Intel IPP могут быть разделены на три основных группы по типу обрабатываемых данных:

  • "сигналы" (термин условный и используется для обозначения одномерных данных) (IPPS);
  • "изображения" (двумерные массивы цветовых данных) (IPPI);
  • матрицы небольшой размерности (массивы NxM) (IPPM).

Функции из Intel IPP, предназначенные для работы с небольшими матрицами, практически совпадают с функциями из Intel Math Kernel Library (MKL). Разница только в размерах матриц. Типичными размерами для Intel IPPM являются 3x1, 4x1, 5x1, 6x1, Nx1, 3x3, 4x4, 5x5, 6x6. В то время как Intel MKL больше подходит для работы с матрицами бОльших размеров.

Существует также логический подраздел, отвечающий за криптографические операции (IPPCP) и структурно входящий в первый домен. Независимо от того, в какой домен входит функция, она может быть классифицирована по степени специфичности:

Принципы работы и примеры использования Intel IPP

Каждая функция из Intel IPP имеет несколько вариантов, оптимизированных под различные архитектуры процессоров. В Intel IPP используются следующие типы оптимизаций:

  • оптимизация кода на С (px);
  • оптимизация кода для процессоров Intel Pentium III с использованием Streaming SIMD Extensions (a6);
  • оптимизация кода для процессоров Intel Pentium 4 с использованием Streaming SIMD Extensions 2 (w7);
  • оптимизация кода для процессоров Intel Pentium 4 с использованием Streaming SIMD Extensions 3 (t7);
  • оптимизация кода для процессоров Intel Xeon с использованием Intel EM64T (m7);
  • оптимизация кода для процессоров Intel Itanium и Itanium 2 (i7);

Существует четыре способа включения функциональности Intel IPP в приложение:

  • динамическая линковка;
  • статическая линковка;
  • смешанная линковка (продвинутая статическая);
  • динамическая линковка с дополнительными возможностями.
Для эффективного исполнения на любом аппаратном обеспечении целесообразно использовать динамическая линковку. В этом случае программа после запуска определяет процессор и подставляет в места вызова функций бинарный код из соответствующей библиотеки:
При использовании статической линковки достигается меньший размер программы, но ценой жесткой привязки к типу процессора. Смешанная линковка, по сути, является статической, но при этом позволяет уменьшить размер исполняемого файла.

Более детальное описание Intel IPP можно найти в книжке "Intel Integrated Performance Primitives: How to Optimize Software Applications Using Intel IPP" или на сайте www.intel.com


© Лаборатория Параллельных информационных технологий НИВЦ МГУ
Rambler's Top100