-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.