Библиотека Intel Integrated Performance Primitives (Intel IPP) поддерживает многоядерные процессоры, содержит в себе оптимизированные функции для обработки мультимедийных данных, поддерживает Intel и AMD процессоры и работает под операционными системами Windows, Linux и Mac OS X. Intel IPP — небольшая библиотека, спроектированная для создания мультимедийных приложений и приложений обработки данных.
Содержание
Возможности [ править | править код ]
Intel IPP включает в себя следующие функции:
- кодирование и декодирование видео;
- кодирование и декодирование аудио;
- JPEG/JPEG2000
- машинное зрение;
- криптография;
- сжатие данных;
- преобразование цвета;
- обработка изображения;
- трассировка луча/визуализация;
- обработка сигналов;
- кодирование речи;
- распознавание речи;
- обработка строк;
- векторная/матричная математика;
Библиотека использует расширенные наборы инструкций процессора MMX, SSE, SSE2, SSE3, SSSE3, SSE4 и многоядерные процессоры.
Структура библиотеки [ править | править код ]
Intel IPP разделен на три основные группы: сигналы (линейный массив данных или вектор), изображения (двухмерный массив для типичных цветовых пространств) и матрицы (nxm массивы для матричных операций).
Половина функций для матричных операций, треть для обработки сигналов и оставшиеся для изображений. Функции Intel IPP разделены на 4 типа данных: 8u (8-битные беззнаковые), 8s (8-битные со знаком), 16s, 32f (32-битные с плавающей точкой), 64f и т. д. Как правило, разработчики приложений работают только с одним доминирующим типом данных для большинства функций обработки, и только в конце обработки производят преобразование в выходной формат.
Именование IPP функции подчиняется предсказуемой строгой схеме.
История [ править | править код ]
Версия 5.2 была представлена 5 июня 2007 г., в код были добавлены примеры сжатия данных, поддержка новых видео-кодеков, поддержка 64-битных приложений для Mac OS X, поддержка приложений Windows Vista, и новые функции для трассировки луча и визуализации.
| Developer(s) | Intel |
|---|---|
| Stable release | |
| Written in | C/C++ |
| Operating system | Linux, macOS, Microsoft Windows, Android |
| Type | Library or framework |
| License | Proprietary, freeware [1] |
| Website | software .intel .com /intel-ipp,%20https: //software .intel .com /en-us /intel-ipp |
Intel Integrated Performance Primitives (Intel IPP) is a multi-threaded software library of functions for multimedia and data processing applications, produced by Intel. [2]
The library supports Intel and compatible processors and is available for Linux, macOS, Windows and Andro >[2]
Contents
Features [ edit ]
The library takes advantage of processor features including MMX, SSE, SSE2, SSE3, SSSE3, SSE4, AVX, AVX2, AVX-512, AES-NI and multi-core processors. [3] Intel IPP includes functions for:
Intel IPP is div >[3]
Half the entry points are of the matrix type, a third are of the signal type and the remainder are of the image and cryptography types. Intel IPP functions are div >[3]
Немного о 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 являются 3×1, 4×1, 5×1, 6×1, Nx1, 3×3, 4×4, 5×5, 6×6. В то время как 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 в приложение:
- динамическая линковка;
- статическая линковка;
- смешанная линковка (продвинутая статическая);
- динамическая линковка с дополнительными возможностями.
Для эффективного исполнения на любом аппаратном обеспечении целесообразно использовать динамическая линковку. В этом случае программа после запуска определяет процессор и подставляет в места вызова функций бинарный код из соответствующей библиотеки:
При использовании статической линковки достигается меньший размер программы, но ценой жесткой привязки к типу процессора. Смешанная линковка, по сути, является статической, но при этом позволяет уменьшить размер исполняемого файла.