630406.ppt
- Количество слайдов: 34
Использование целочисленного линейного программирования для планирования команд линейных участков и конвейеризации циклов
Введение: * Программная конвейеризация циклов, эвристические подходы, планирование по модулю. Пример конвейеризации простого цикла. * Проблема с временем распределения регистров, сохранение и восстановление регистров. * Особенности характерные для встраиваемых архитектур и их влияние на задачу планирования команд. * Точные подходы к планированию.
for (i=0; i
Пусть процессор способен одновременно исполнять две команды, одну арифметическую и один доступ в память или передачу управления: 1 2 3 4 7 r 227=[r 222] r 228=[r 221] r 229=r 227+r 228 [r 220]=r 229 r 220=r 220+0 x 4 5 r 222=r 222+0 x 4 6 r 221=r 221+0 x 4 8 pc={(r 222!=r 230)? L 43: pc} Целых 5 тактов даже без учета латентностей!
Пролог: 1 r 227=[r 222] 2 r 228=[r 221] 3 r 229=r 227+r 228 5 r 222=r 222+0 x 4 6 r 221=r 221+0 x 4 1 r 227=[r 222] 2 r 228=[r 221] 5 r 222=r 222+0 x 4 L 43: 1 r 227=[r 222] 2 r 228=[r 221] 3 r 229=r 227+r 228 5 r 222=r 222+0 x 4 [2] [1] [2] Эпилог: 4 [r 220]=r 229 7 r 220=r 220+0 x 4 3 r 229=r 227+r 228 4 [r 220]=r 229 6 r 221=r 221+0 x 4 7 r 220=r 220+0 x 4 6 7 4 8 r 221=r 221+0 x 4 r 220=r 220+0 x 4 [r 220]=r 229 pc={(r 222!=r 230)? L 43: pc} [1] [0] [0]
Дистанция 0 1 -> 3 (2) 2 -> 3 (2) 3 -> 4 (4) 5 -> 8 (1) Дистанция 1 1 2 3 4 5 6 7 8 r 227=[r 222] r 228=[r 221] r 229=r 227+r 228 [r 220]=r 229 r 222=r 222+0 x 4 5 -> 5 1 (1) r 221=r 221+0 x 4 6 -> 6 2 (1) r 220=r 220+0 x 4 7 -> 7 4 (1) pc={(r 222!=r 230)? L 43: pc}
Особенности характерные для встраиваемых архитектур и их влияние на задачу планирования команд. * Малое число регистров. * Специализация регистров. * Упрощенные алгоритмы планирования в процессоре. * Сложные правила соместимости команд для архитектур с явным параллелизмом.
Точные подходы к планированию. * Попытка найти оптимальное расписание. * Необходимость совместно решать связанные задачи. * Применяемые подходы. Математическое программирование, программирование в ограничениях и др. * Подход выбранный нами: не распределяем регистры, но гарантируем успех при распределении. Используем ЦЛП.
Использование вания. целочисленного линейного программиро- * Что такое ЦЛП. * Формулировка задачи планирования линейного участка в виде ЦЛП задачи (упрощенный подход). * Отличие конвейеризации цикла от планирования линейного участка, модификация ЦЛП описания.
Задача линейного программирования (ЛП, LP) - задача оптимизации. Она состоит из: множества переменных; набора линейных равенств или нестрогих (ограничения); целевой линейной функции. неравенств
Возможные результаты при решении ЛП задачи. Пустое множество допустимых точек, т. е. ограничения несовместны. Конечный оптимум - вершина полиэдра. Оптимума не существует, т. е. полиэдр не в сторону улучшения целевой функции. ограничен Существуют эффективные алгоритмы, в том числе полиномиальный.
Возможные результаты при решении ЦЛП задачи с ниченной соответствующей ЛП задачей: Пустое множество можны два случая: огра- допустимых точек, при этом воз- пустой полиэдр - нет решений у непрерывной задачи (определяется быстро); решения непрерывной задачи есть, среди них нет целого. Конечный оптимум - целая точка внутри или на нице полиэдра. гра-
Что может случиться на практике. Допустимой память. точки не нашли - исчерпано время или Есть допустимая точка, но оптимальность не доказана - исчерпано время или память. Решение прервано - не хватает точности вычислений.
# Планирование команд линейного участка неотрицательная целая константа T для каждой команды i: для каждого t из 1. . T: бинарные переменные N[i, t] # Однократное выполнение для каждой команды i: N[i, T] = 1 # Неубывание выполненности для каждой команды i: для каждого t из 2. . T: N[i, t-1] <= N[i, t]
N[r, 1] = 0. . . . N[r, l] = 0 N[r, l+1] <= N[w, 1] N[r, l+2] <= N[w, 2]. . . . N[r, T] <= N[w, T-l]
# Соблюдение зависимостей для каждой зависимости (w, r, l): N[r, l] = 0 для каждого t из l+1. . T: N[r, t] <= N[w, t-l] # Ограничения по ресурсам # S(i, t)=1 <==> команда i запущена на такте t макро S(i, t) = если t = 1: N[i, 1] иначе: N[i, t] - N[i, t-1] для каждого вида ресурса r: для каждого такта t из 1. . T: ( сумма по всем командам i сумма по тактам tp из 1. . t Use. Res[i, t-tp, r] * S(i, tp) ) <= All. Res[r]
# Ограничение на число регистров, достаточное условие для каждого t из 1. . T: ( сумма по всем командам i ((W[i]-R[i]) * N[i, t]) ) <= All. Reg
# Конвейеризация цикла неотрицательная целая константа T для каждой команды i: для каждого t из 1. . T: неотрицательные целые переменные N[i, t] для каждой команды i: для каждого t из 2. . T: N[i, t-1] <= N[i, t] для каждой команды i: N[i, T] <= N[i, 1] + 1
макро N(i, t) = если t < 1: N(i, t+T) - 1 если t > T: N(i, t-T) + 1 иначе: N[i, t] макро S(i, t) = # Рекурсивное # определение N(i, t) - N(i, t-1) для каждой команды i: N(i, 0) >= 0 # Ограничение по ресурсам для каждого вида ресурса r: для каждого t из 1. . T: ( сумма по всем командам i сумма по tp из t-M. . t Use. Res[i, t-tp, r] * S(i, tp) ) <= All. Res[r]
# Ограничение на соблюдение зависимостей для каждой зависимости (w, r, l, d): для каждого t из 1. . T: N(r, t) - d <= N(w, t-l) # Ограничение на число регистров, достаточное условие для каждого t из 1. . T: Dist. Sum + ( сумма по всем командам i ((W[i]-R[i]) * N[i, t]) ) <= All. Reg
# Минимальная глубина конвейеризации неотрицательная целая переменная Conv. Depth цель: минимизация Conv. Depth для каждой команды i: N[i, T] <= Conv. Depth
Сколько физических регистров требуется для хранения a? 1 2 3 4 a b c d = m[i] += a - 3 = 2*a
# Необходимое и достаточное условие достаточности # регистров для каждого t из 1. . T: для каждого виртуального регистра vr: неотрицательные целые переменные Reg. For[vr, t] для каждой зависимости (w, r, l, d, vr): для каждого t из 1. . T: (N(w, t)+d) - N(r, t) <= Reg. For[vr, t] для каждого t из 1. . T: сумма по всем vr: Reg. For[vr, t] <= All. Reg
Проблемы организации результатов вычислений и использования их * Что делать если для зависимости выделено несколько регистров? Копирование регистров или раскатка цикла. Кратность раскатки. * Что делать, если решение долго не находится? * Как перебирать значения может закончиться? * Возможность принудительного ограничения глубины конвейеризации и/или кратности раскатки. * Чем в конечном итоге решаются ЦЛП задачи. Сравнение солверов. T? И чем этот перебор
Пример расписания требующего раскатки. Ядро цикла: 0: 45 r 226=[r 221] 1: 48 [r 219]=r 228 2: 46 r 227=[r 220] 3: 49 r 221=r 221+0 x 4 [2] [0] [2] 47 51 50 55 r 228=r 226+r 227 [1] r 219=r 219+0 x 4 [0] r 220=r 220+0 x 4 [2] pc={(r 221!=r 229)? L 42: pc}[0] Клонированы регистры: r 226 -> r 236 r 228 -> r 237 r 221 -> r 238 Результат раскатки: 0: 1: 2: 3: r 236=[r 221] [r 219]=r 237 r 227=[r 220] r 238=r 221+0 x 4 r 228=r 226+r 227 r 219=r 219+0 x 4 r 220=r 220+0 x 4 pc={(r 238==r 229)? L 129: pc} 4: 5: 6: 7: r 226=[r 238] [r 219]=r 228 r 227=[r 220] r 221=r 238+0 x 4 r 237=r 236+r 227 r 219=r 219+0 x 4 r 220=r 220+0 x 4 pc={(r 221!=r 229)? L 91: pc}
GLPSOL -- GLPK LP/MIP Solver, Version 4. 11 Copyright (C) 2000, 01, 02, 03, 04, 05, 06 Andrew Makhorin
lpsolve citation data -----------Description : Open source MILP system Language : Multi-platform, pure ANSI C / POSIX source code, Lex/Yacc based parsing Official name : lp_solve (alternatively lpsolve) Release data : Version 5. 5. 0. 0 dated 17 may 2005 Co-developers : Michel Berkelaar, Kjell Eikland, Peter Notebaert Licence terms : GNU LGPL (Lesser General Public Licence) Citation policy : General references as per LGPL Module specific references as specified therein ============================== COIN-OR IBM Common Public License Version 1. 0 ============================== cplex Xpress-MP ILOG DASH OPTIMIZATION 100. . 00 $
Первые результаты и их анализ. * Сгенерированный цикл. * Сравнение результатов с результатами работы ристического планировщика (SMS). * Глубина конвейеризации и генерируемых расписаниях. эв- кратность раскатки в
Скалярное произведение векторов (над C) код руется для R 7000. L 46: 51 55 56 57 59 60 61 64 65 66 68 69 70 71 r 220=[r 213] r 219=[r 212] r 218=[r 213+0 x 4] r 217=[r 212+0 x 4] r 226=r 218*r 217 r 227=r 220*r 219 -r 226 r 216=r 216+r 227 r 229=r 219*r 218 r 230=r 220*r 217+r 229 r 215=r 215+r 230 r 214=r 214+0 x 1 r 213=r 213+0 x 8 r 212=r 212+0 x 8 pc={(r 222!=r 214)? L 46: pc генери-
Ядро цикла полученного 0: 69 r 213=r 213+0 x 8 [0] 1: 56 r 218=[r 213+0 x 4] [0] 2: 3: 59 r 226=r 218*r 217 [1] 4: 55 r 219=[r 212] [0] 5: 66 r 215=r 215+r 230 6: 64 r 229=r 219*r 218 7: 51 r 220=[r 213] [1] 8: 57 r 217=[r 212+0 x 4] [1] SMS: [0] 60 r 227=r 220*r 219 -r 226 [1] 65 r 230=r 220*r 217+r 229 [1] 68 r 214=r 214+0 x 1 [1] 61 r 216=r 216+r 227 [0] [1] 70 r 212=r 212+0 x 8 [2] 71 pc={(r 222!=r 214)? L 46: pc} Результат решения ЦЛП задачи: 0: 56 r 218=[r 213+0 x 4] [2] 65 r 230=r 220*r 217+r 229 [1] 1: 55 r 219=[r 212] [2] 60 r 227=r 220*r 219 -r 226
Тесты планирования циклов для rm 7000 ILP SMS (такты) --------------------------------Сложение векторов (R) 8 8 То же без зависимостей по памяти 5 5 Сложение векторов (C) 8* 8 То же без зависимостей по памяти 7 8 Схема Горнера (R) 4 4 Схема Горнера (C) 12 14 Схема Горнера для массива точек 8 8 Умножение векторов поэлементно (R) 5 5 Умножение векторов поэлементно (C) 23* отказ То же с 3 -мя умножениями 17 20 То же без зависимостей по памяти 9 10 Скалярное произведение (R) 4 4 Скалярное произведение (C) 7 9 Внешнее произведение векторов (R) 4 4 Умножение вектора на константу (R) 7 7 Умножение вектора на константу (C) 17* 18 Транспонирование матриц 3 4 4 нецентральных момента 6 6 Среднее гармоническое 36 36 Синонимы 7 7 sqrt(1/a[0]+sqrt(1/a[1]+. . . 72 73 *) - результат возможно неоптимальный
ILP SMS --------------------------flops. c 36 36 4 4 36 36 18 21 16 19 36 36 32 39 108 109 34 41
Планы по дальнейшему развитию. * Использование вне компилятора. * Эксперименты с настройкой компилятора для процессоров без кэша и с небольшим кэшом требующим явного управления. * Улучшение оптимизации за счет выбора альтернативных команд, и переупорядочивания последовательных коммутирующих действий.
Благодарю за внимание.


