-mpmd-pipeline-scheduler
Изменяет порядок фрагментов для получения заданного графика конвейера.
Переупорядочивает фрагменты в соответствии с расписанием конвейера. Алгоритм планирования основан на функции happen before , которая принимает два фрагмента f1 и f2 в качестве аргументов и проверяет, должен ли f1 быть запланирован перед f2 . Эта функция требует выполнения следующих условий:
-
f1иf2назначены на одну и ту же сетку, -
f1иf2являются единицами планирования (т. е. определяемыми пользователем фрагментами с определенными счетчиками вызовов), и -
f1не зависит отf2, аf2не зависит отf1. И этого должно быть достаточно для описания многих современных графиков работы конвейеров.
Для каждого фрагмента f1 , который должен быть запланирован до f2 , проход планировщика создаёт зависимость по управлению от f1 к f2 . Затем он применяет топологическую сортировку к модулю, чтобы гарантировать соблюдение всех зависимостей (и соответствие программы допустимому виду SSA). Наконец, проход удаляет из графа любую внесённую зависимость по управлению.
Параметры
-must-happen-before : A comparator that determines whether a fragment must be scheduled before another. Can be parsed from a built-in `PipelineSchedule` as follows: `builtin:<schedule-as-string>`.
-remove-control-dependencies : Whether to remove control dependencies at the end of the pass.
-mpmd-remat-fragment
Рематериализует фрагменты.
Находит пары фрагментов (прямой и обратный), которые необходимо рематериализовать, и клонирует каждый прямой фрагмент до его обратного использования, заменяя все обратные использования значений, созданных прямым фрагментом, клонированными аналогами. Это может использоваться для рематериализации активации в параллельном конвейере.
Если merge_remat_fragments равно true, то мы объединяем фрагменты remat с их фрагментами-потребителями.
Параметры
-merge-remat-fragments : Whether to merge the remat fragments into their consumer fragments.
-mpmd-rule-based-schedule
Изменяет порядок фрагментов на основе правил, определенных пользователем.
Переупорядочивает фрагменты, добавляя управляющие зависимости на основе списка правил. Каждое правило определяет последовательность фрагментов в желаемом порядке выполнения, а управляющие зависимости добавляются для обеспечения этой последовательности. Например, для правила с фрагментами [A, B, C] управляющие зависимости добавляются для A->B и B->C. Проход считается невыполненным, если правила создают циклическую зависимость. Если указанный фрагмент в паре фрагментов внутри правила не найден, эта пара не планируется.
Параметры
-rules : A list of fragment schedule rules. Each rule is a list of `FragmentInfo`s that specifies the order in which the fragments should be executed.
-remove-control-dependencies : Whether to remove control dependencies at the end of the pass.