1784985a1092d4f28266e1e7f4e76a7d.ppt
- Количество слайдов: 27
Оптимизация программного обеспечения ЦСП TMS 320 C 67 x
Программное обеспечение ЦСП должно удовлетворять двум требованиям: скорость обработки должна быть не меньше требуемой; объем кода программы должен быть не больше допустимого. Если созданное ПО не удовлетворяет одному из этих требований, то необходима его доработка. Такая доработка называется оптимизацией. Оптимизация по скорости, как правило, наиболее важна.
Вся программа разбивается на ряд отдельных фрагментов, и измеряется время выполнения каждого из них. Выделяются один или несколько основном определяющих общие Выделенные детально и реализации. фрагментов временные кода, в затраты. фрагменты кода анализируются более ищутся пути к их более эффективной
Обычно в основе таких фрагментов лежат циклы. На процессорах TMS 320 C 67 х для оптимизации циклов используются: программная конвейеризация (Software Pipelining) и разворачивание циклов (Loop Unrolling).
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) Рассмотрим пример. Необходимо разработать программу, вычисляющую: yi = c xi yi и xi – массивы размерности N, c – константа.
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) Текст программы: . global N C . set _c_int 00 100 0 x 40000000 _c_int 00: MVKL MVKH . S 2 N, B 0 C, B 1
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) _LOOP: ; ---------------LDW. D 1 T 1 *A 7++[1], A 1 || SUB. S 2 B 0, 1, B 0 NOP 3 NOP ||[B 0]B MPYSP NOP . S 1. M 2 X _LOOP A 1, B 2 3 STW. D 2 T 2 B 2, *B 7++[1] ; ---------------NOP
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) Можно считать, что цикл представляет собой последовательность этапов обработки, через которые друг за другом проходят все элементы входного массива данных. В нашем случае такими этапами являются: выборка из памяти (LDW), умножение (MPYSP) и запись (STW). Команды LDW, MPYSP и STW образуют путь данных через цикл. Этот путь определяет время выполнения цикла. Команды B и SUB являются вспомогательными. Они могут быть выполнены параллельно с основными командами без увеличения длины пути.
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) LDW NOP NOP LDW MPY NOP NOP MPY STW NOP NOP STW
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) LDW NOP NOP LDW MPY NOP NOP MPY NOP STW Цех 1 Детали Шлифовка Транспортировка NOP STW Цех 2 Покраска Транспортировка Цех 3 Сушка
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) LDW NOP NOP LDW MPY NOP NOP MPY NOP NOP STW Цех 1 Шлифовка LDW LDW LDW MPY Цех 2 Транспортировка Детали LDW STW LDW MPY Транспортировка Сушка Покраска LDW MPY STW … … … MPY STW Цех 3 MPY STW STW STW
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) Перечисленные этапы образуют конвейерную обработку последовательности входных данных (программный конвейер). В представленном варианте программы конвейер работает нерационально: его отдельные этапы постоянно простаивают в ожидании окончания обработки на предыдущих этапах. Конвейер должен работать более эффективно за счет независимого параллельного функционирования всех его этапов. Для этого программу следует переписать в следующем виде.
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) . global N C . set _c_int 00 100 0 x 40000000 _c_int 00: MVKL MVKH . S 2 N, B 0 C, B 1 SUB . S 2 B 0, 15, B 0
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) _LOOP_PROLOG: LDW LDW || || LDW B . D 1 T 1 *A 7++[1], A 1. S 1 _LOOP_KERNEL LDW || . D 1 T 1 *A 7++[1], A 1 MPYSP. M 2 X. S 1 _LOOP_KERNEL A 1, B 2 B LDW || || B *A 7++[1], A 1
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) LDW || || B . D 1 T 1 *A 7++[1], A 1 MPYSP. M 2 X. S 1 _LOOP_KERNEL A 1, B 2
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) _LOOP_KERNEL: ; ---------------LDW. D 1 T 1 *A 7++[1], A 1 || MPYSP. M 2 X A 1, B 2 || STW. D 2 T 2 B 2, *B 7++[1] ||[B 0]SUB. S 2 B 0, 1, B 0 ||[B 0]B. S 1 _LOOP_KERNEL ; ----------------
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) _LOOP_EPILOG: || || A 1, B 2 . D 2 T 2 MPYSP. M 2 X B 2, *B 7++[1] A 1, B 2 STW . D 2 T 2 MPYSP. M 2 X B 2, *B 7++[1] STW STW STW . D 2 T 2 B 2, *B 7++[1] B 2, *B 7++[1] STW STW
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) _LOOP_PROLOG: . . . _LOOP_KERNEL: ; ---------------LDW. D 1 T 1 *A 7++[1], A 1 || MPYSP. M 2 X A 1, B 2 || STW. D 2 T 2 B 2, *B 7++[1] ||[B 0]SUB. S 2 B 0, 1, B 0 ||[B 0]B. S 1 _LOOP_KERNEL ; ---------------_LOOP_EPILOG: . . .
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) Все этапы обработки данных выполняются параллельно над разными данными. Ожидание окончания работы предыдущих команд исключается. Тело цикла «сжимается» до одной команды. Параллельная работа всех этапов остается невозможной при запуске и при остановке конвейера. Появляются пролог и эпилог цикла. Чем больше итераций в цикле, тем меньшее влияние на время его выполнения оказывают пролог и эпилог. Оценим выигрыш примененного принципа конвейерной обработки.
ПРОГРАММНАЯ КОНВЕЙЕРИЗАЦИЯ (SOFTWARE PIPELINING) Для первой реализации программы характерно N-кратное прохождение данных через все этапы обработки за 10 тактов. Поэтому время выполнения цикла обработки не может быть меньше 10*N тактов. В случае N = 100 получаем 1000 тактов. Для второй реализации имеем: пролог цикла длится 9 тактов, ядро цикла – N-9 тактов, эпилог цикла – 9 тактов. То есть, время выполнения цикла ограничивается снизу значением 9+(N-9)+9. В случае N = 100 это дает 109 тактов выполнения, что соответствует почти 10 -кратному ускорению выполнения задачи при оптимизации с использованием принципа программной конвейеризации.
«РАЗВОРАЧИВАНИЕ» ЦИКЛОВ Принцип «разворачивания» циклов (Loop Unrolling) состоит в трансформации исходного неоптимизированного цикла в новый оптимизированный такой, что за одну итерацию нового цикла производится L итераций исходного цикла. В простейшем случае такая трансформация основана на том, что процессор TMS 320 C 6701 имеет двойной набор вычислительных блоков. Пример: Требуется Исходный осуществить цикл условно MPYSP xi , hi выполняемой N раз. N умножений xi*hi. представляется командой:
«РАЗВОРАЧИВАНИЕ» ЦИКЛОВ Такой цикл выполняется как При использовании второго TMS 320 C 67 х переходим к представленному командой: || минимум N тактов. умножителя процессора «развернутому» циклу, MPYSP xi, hi MPYSP xi+1, hi+1 выполняемой N/2 раз. Оптимизированный цикл выполняется N/2 тактов. Таким образом, за счет использования принципа «разворачивания» цикла получили двухкратное ускорение процесса вычислений.
ОПТИМИЗАЦИЯ НА СИ При использовании Си генерация эффективного кода выполняется оптимизирующим компилятором. Для программиста задача оптимизации на Си заключается в том, чтобы «объяснить» компилятору структуру программы, чтобы он смог сгенерировать максимально эффективный код. Основной инструмент компилятора. при этом – «обратная связь» «Обратная связь» компилятора (Compiler Feedback) представляет собой комментарии к оптимизации цикла, выполняемой компилятором при переводе программы с языка Си на ассемблер и оставляемые им в тексте генерируемого ассемблерного кода.
ОПТИМИЗАЦИЯ НА СИ
ОПТИМИЗАЦИЯ НА СИ ; * Resource Partition:
ОПТИМИЗАЦИЯ НА СИ ; * ; * ; * ; * Searching for software pipeline schedule at. . . ii = 5 Register is live too long ii = 6 Did not find schedule ii = 7 Schedule found with 3 iterations in parallel done Epilog not entirely removed Collapsed epilog stages : 1 Prolog not removed Collapsed prolog stages : 0 Minimum required memory pad : 2 bytes Minimum safe trip count : 2
СРЕДСТВА ОПТИМИЗАЦИЯ НА СИ Ключевые слова - позволяют точно определить компилятору тип используемых переменных или функций (restrict - используется при объявлении функций в описании массивов (указателей на них) и позволяют определить для компилятора независимость расположения в памяти этих массивов. void myf(float * restrict a, float * restrict b, ). int N) Директивы компилятору – позволяют сообщить компилятору, как ему следует понимать определенный фрагмент кода (_ DATA_ALIGN, _ MUST_ITERATE). Встроенные средства – набор специальных Си-функций, переводимых компилятором напрямую в соответствующие им команды ассемблера. Позволяют задействовать на языке высокого уровня такие команды процессора, которые не могут быть представлены средствами стандартного языка Си. Ассемблерные вставки – ассемблерные команды, размещаемые прямо в тексте Си-программы: asm(”assembler text”); . Библиотека функций ЦОС – набор типовых функций ЦОС, разработанных специально для конкретного процессора и эффективно использующих его ресурсы. Библиотека DSPLIB содержит функции адаптивной фильтрации, корреляции, БПФ, фильтрации и свертки, и других вычислений.
1784985a1092d4f28266e1e7f4e76a7d.ppt