При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка? |
Введение в библиотеку IPP
1.4. Инициализация библиотеки. Выделение и освобождение памяти.
Функции библиотеки Intel IPP оптимизированы под широкий набор архитектур. Для выбора оптимальной реализации для среды, в которой выполняется программа, необходимо в е? начале вызвать следующие функции (в зависимости от типа используемой линковки)
IppStatus ippStaticInit(void)
Функция определяет тип используемого процессора и выбирает наиболее подходящий для данного процессора статический код. Данная функция применима лишь при статической линковке.
IppStatus ippInit(void))
Функция определяет тип используемого процессора и выбирает наиболее подходящий для данного процессора код.
Одним из факторов, влияющих на производительность функций библиотеки Intel IPP, является использование выровненных данных. Для выделения и освобождения памяти, выровненной по 32 байт, под произвольные данные используются следующие функции:
void* ippMalloc(int length) void ippFree(void* ptr)
Для выделения данных под одномерные массивы (сигналы) используется следующее семейство функций:
Ipp<datatype>* ippsMalloc_<datatype>(int len)
которое выделяет массив, состоящий из элементов типа <datatype> длины len.
Для освобождения памяти, выделенной при помощи ippsMalloc необходимо использовать функцию ippsFree.
При работе с изображениями/видео память под обрабатываемые данные выделяется при помощи функций вида
Ipp<datatype>* ippiMalloc_<mod>(int widthPixels, int heightPixels, int* pStepBytes)
- widthPixels – ширина изображения (в пикселях).
- heightPixels – высота изображения (в пикселях).
- pStepBytes (выходной параметр) – расстояние между последовательными строками в изображении (в байтах).
- <mod> – число каналов в изображении и формат данных (например, 8u_C3 – трехканальное изображение, интенсивность каждого пикселя описывается unsigned char)
Память, выделенную с помощью ippiMalloc, необходимо освобождать с использованием функции ippiFree.
1.5. Вопросы производительности
1.6. Создание приложения в среде Microsoft Visual Studio 2010
Рассмотрим пример создания приложения, использующего библиотеку Intel IPP, в среде Microsoft Visual Studio 2010.
- Запустите приложение Microsoft Visual Studio 2010.
- В меню File выполните команду NewProject….
- Как показано на рис. 2, в диалоговом окне New Project в типах проекта выберите Win32, в шаблонах Win32 Console Application, в поле Name введите название проекта (ipp_demo), в поле Location укажите путь к папке, в которой будут сохранены с лабораторными работами. Нажмите OK.
- В диалоговом окне Win32 Application Wizard нажмите Next (или выберите Application Settings в дереве слева) и установите флаг Empty Project. Нажмите Finish.
- В окне Solution Explorer в папке Source Files выполните команду контекстного меню AddNew Item…. В дереве категорий слева выберите Code, в шаблонах справа – C++ File (.cpp), в поле Name введите имя файла main.
- Нажмите Add. В результате выполненной последовательности действий в окне редактора кода Visual Studio будет открыт пустой файл main.cpp.
- Введите исходный код программы. Данное приложение инициализирует библиотеку, выделяет память под три одномерных массива a, b и c, заполняет массивы a и b данными, вычисляет поэлементную сумму этих массивов и помещает результат в массив с, печатает результат и освобождает память, выделенную под массивы.
#include "ipp.h" #include <stdio.h> void main() { int n = 5; ippInit(); Ipp32f* a = ippsMalloc_32f(n); Ipp32f* b = ippsMalloc_32f(n); Ipp32f* c = ippsMalloc_32f(n); for (int i = 0; i < n; i++) { a[i] = (float)i; b[i] = (float)(10 - i); } ippsAdd_32f(a, b, c, n); for (int i = 0; i < n; i++) { printf("%.3f + %.3f = %.3f\n",a[i],b[i], c[i]); } ippsFree(a); ippsFree(b); ippsFree(c); }
- Выполните команду контекстного меню Properties, чтобы получить доступ к настройкам проекта. Откройте вкладку Configuration PropertiesIntel Performance LibrariesUse IPP . Выберите один из предлагаемых способов линковки (Shared DLL, Single-threaded static library, Multi-threaded static library).
- Запустите компиляцию и сборку приложения.