| 31.01.2009 09:00 | |
Введение
Автор: Ханг Нгуйен (Khang Nguyen)
Перекодирование носителей, которое позволяет осуществлять их взаимодействие, играет важную роль в концепции цифрового дома. Требования стандарта Intel Networked Media Product Requirements (INMPR) стимулируют взаимодействие между цифровыми устройствами в цифровой среде. Оптимизация механизма кодека (кодировщик/декодер, основа программы конвертирования) сделает процесс перекодировки носителей более эффективным, что в свою очередь повысит качество работы пользователя в цифровом доме. В этой статье приведены практические советы и способы повышения производительности механизма кодека. Эти советы охватывают использование событий анализатора производительности Intel® VTune™, OpenMP для многопоточности и инструкций Prescott New Instructions (Streaming SIMD Extensions 3 (SSE3)). Мы также обсудим, когда лучше использовать более быстрые инструкции, применяя различные компоненты исполнения для улучшения параллелизма, и когда использовать MMX™ вместо SSE для повышения скорости. Здесь вы также узнаете, когда нужно использовать преимущества оптимизированных переключателей компилятора Intel.
Что такое перекодировка?
Поскольку содержимое выпускается в самых разных форматах, прежде чем оно поступит в другое устройство, необходима перекодировка для его адаптации с помощью конвертирования одного формата носителя в другой. Самый распространенный способ конвертирования одного формата в другой — сначала выполнить декодировку для получения необработанных данных, а затем — кодировать их в нужном формате. Поскольку поток MPEG состоит из аудио- и видеоданных, необходимо разделить их и декодировать для получения необработанных данных, прежде чем заново кодировать в нужных форматах и снова соединять их.
Перекодирование носителей, которое позволяет осуществлять их взаимодействие, играет важную роль в концепции цифрового дома. Требования стандарта Intel Networked Media Product Requirements (INMPR) стимулируют взаимодействие между цифровыми устройствами в цифровой среде. Оптимизация механизма кодека (кодировщик/декодер, основа программы конвертирования) сделает процесс перекодировки носителей более эффективным, что в свою очередь повысит качество работы пользователя в цифровом доме. В этой статье приведены практические советы и способы повышения производительности механизма кодека. Эти советы охватывают использование событий анализатора производительности Intel® VTune™, OpenMP для многопоточности и инструкций Prescott New Instructions (Streaming SIMD Extensions 3 (SSE3)). Мы также обсудим, когда лучше использовать более быстрые инструкции, применяя различные компоненты исполнения для улучшения параллелизма, и когда использовать MMX™ вместо SSE для повышения скорости. Здесь вы также узнаете, когда нужно использовать преимущества оптимизированных переключателей компилятора Intel.
Что такое перекодировка?
Поскольку содержимое выпускается в самых разных форматах, прежде чем оно поступит в другое устройство, необходима перекодировка для его адаптации с помощью конвертирования одного формата носителя в другой. Самый распространенный способ конвертирования одного формата в другой — сначала выполнить декодировку для получения необработанных данных, а затем — кодировать их в нужном формате. Поскольку поток MPEG состоит из аудио- и видеоданных, необходимо разделить их и декодировать для получения необработанных данных, прежде чем заново кодировать в нужных форматах и снова соединять их.
Оптимизация кодека
Кодек представляет собой процесс сжатия и развертывания. Он находится в основе, или в ядре, программы конвертирования.
Оптимизация кодека может быть выполнена с помощью сокращения времени кодирования и/или декодирования файла (потока). Можно также улучшить механизм за счет сокращения применения центрального процессора, что позволяет поместить больше функций или данных в один и тот же выделенный интервал времени: например, больше голосов игровых персонажей. И, наконец, нужно сократить размер для чувствительных к размеру или мобильных приложений, поскольку существуют мультимедийные приложения, предназначенные для настольных компьютеров, портативных компьютеров, карманных компьютеров и смартфонов.
Общие вопросы
Оптимизация процесса начинается со следующих шагов:
Всегда просматривайте следующие этапы.
Оптимизация кодека может быть выполнена с помощью сокращения времени кодирования и/или декодирования файла (потока). Можно также улучшить механизм за счет сокращения применения центрального процессора, что позволяет поместить больше функций или данных в один и тот же выделенный интервал времени: например, больше голосов игровых персонажей. И, наконец, нужно сократить размер для чувствительных к размеру или мобильных приложений, поскольку существуют мультимедийные приложения, предназначенные для настольных компьютеров, портативных компьютеров, карманных компьютеров и смартфонов.
Общие вопросы
Оптимизация процесса начинается со следующих шагов:
- лучшее использование оборудования;
- использование анализатора производительности Intel® VTune™ для поиска активных точек;
- поиск функции, имеющих самый большой показатель такта часов и инструкций за такт (CPI);
- включение счетчиков для ошибочного прогнозирования ветвления, перенаправления хранения, ступенчатости 64K, разбиения кэша и отслеживания неудачных поисков в кэш-памяти;
- выполнение общих правил оптимизации;
- развертывание цикла, сокращение количества ветвлений, использование SSE2/SSE3;
- использование компилятора Intel;
- использование комплекта Intel® Performance Library Suite;
- выполнение общих правил оптимизации.
Всегда просматривайте следующие этапы.
- Наличие возможных недостатков (разбиения кэша, ошибочного прогнозирования ветвления, перенаправления хранения и т. п.).
- Поток на высшем уровне может избежать дефицита ресурсов. Поскольку этот механизм используется другими приложениями, его функции могут вызываться много раз, в особенности, если приложения также являются многопоточными.
- При распараллеливании приложений обратите внимание на использование библиотек производительности Intel, поскольку некоторые их функции являются многопоточными.
- Не развертывайте циклы слишком сильно, чтобы избежать отслеживания нагрузки кэша.
- Не игнорируйте MMX, поскольку он может оказаться быстрее SSE/SSE2 в тех случаях, когда приложение интенсивно использует 64-разрядные данные и необходимы усилия для преобразования данных, чтобы они соответствовали 128-разрядным реестрам.
- Ведите наблюдение за сроком работы батареи в мобильных приложениях.
- Использование компилятора Intel: /O3, /QaxW, /QaxN, /QaxP, /Qipo, /Qparallel, /Qopenmp. Очень часто можно достичь высокой производительности только за счет использования компилятора Intel с правильными переключателями.
- Используйте специальные функции, например реверсивные (rcp и rcp_nr), для замены раздела с умножением и ускорения приложения.
- По возможности используйте инструкцию SSE3 LDDQU вместо MOVDQU.
- Более быстрые инструкции
- Различные функциональные модули
- MOVNTxx: сохраните значения с помощью Non-Temporal Hint, чтобы избежать кэширования данных.
- Используйте комбинированные инструкции, такие как PMADDWD.
Когда использовать потоки
Перед:
Перед:
for (i=0; i<4; i++) |
После:
#pragma omp parallel sections |
Когда не нужно использовать потоки
Перед:
Перед:
... |
После:
... |
Сначала этот цикл кажется вполне подходящим для разделения на потоки. На самом же деле это повысит производительность, только если он находится на самом ближнем внешнем уровне. Однако этот цикл находится в функции, которая глубоко скрыта на многих подуровнях, его разделение на потоки может привести к нехватке ресурсов. Один раз этот цикл был реализован внутри функции, которая занимает всего около 8,8% общего времени выполнения. После разделения на потоки всего 2 циклов вся система начала работать в 5 раз медленнее.
Использование комбинированной функции PMADDWD
Сложные инструкции, такие как PMADDWD: Multiply and Add – позволяют сэкономить значительное количество тактовых циклов.Перед: (24 тактовых цикла)
Использование комбинированной функции PMADDWD
Сложные инструкции, такие как PMADDWD: Multiply and Add – позволяют сэкономить значительное количество тактовых циклов.Перед: (24 тактовых цикла)
pmullw xmm1, xmm6 (8) |
После: (18 тактовых циклов)
pmaddwd xmm1, xmm6 (8) |
С помощью использования функции PMADDWD мы объединили две операции — добавление и умножение — в одну, что в данном случае позволило сэкономить шесть тактовых циклов.
Устранение условий ветвления
Исходный вариант
Устранение условий ветвления
Исходный вариант
for (j = 0; j < 4; j++) |
Оптимизация 1: устранение ветвлений
if( (x < max_x)& (y < max_y)& (0 > y) & (0 < x-2)) |
Оптимизация 2: устранение ветвления и развертывания внутренних циклов
if( (x+6 < max_x)& (y+3 < max_y)& (0 < y) & (0 < x-2)) |
Оптимизация 3: устранение ветвления и улучшение параллелизма
if( (x+6 < max_x)& (y+3 < max_y)& (0 < y) & (0 < x-2)) |
С помощью ввода временных переменных t0… t5 мы устраняем зависимость результата переменной. Это повысит шансы компилятора на распараллеливание.
Советы и приемы: заключение
При оптимизации механизма кодека учитывайте следующее.
- По мере возможности используйте компилятор Intel.
- Выполняйте общие правила оптимизации.
- При разбиении приложений на потоки уделяйте особое внимание использованию библиотек производительности Intel.
- В некоторых случаях MMX оказывается быстрее.
- Используйте разные функциональные модули для большего параллелизма.
- Используйте более быстрые инструкции.
- Соблюдайте баланс между производительностью и сроком службы батареи для мобильных приложений.
Об авторе
Ханг Нгуйен – главный разработчик приложений, работающий в группе программного обеспечения и решений корпорации Intel. Связаться с ним можно по адресу khang.t.nguyen@intel.com.
Дополнительные ресурсы
- De-Mystifying Software Performance Optimization (Снятие покрова таинственности с оптимизации производительности ПО)
- Библиотеки Intel® IPP создают новый уровень производительности и возможности переноса для независимых разработчиков программного обеспечения
- Speed Up Your Applications: Intel® VTune™ Performance Analyzer 7.1 (Ускорение приложений: анализатор производительности Intel® VTune™ 7.1)
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.
Комментарии (0) 
Обратная ссылка (1)
- Блог компании Intel Corporation / Статьи на ISN
08.10.2010 00:54
Оставить комментарий 
Для получения технической помощи посетите сайт службы поддержки.
