-mpmd-pipeline-scheduler

قطعات را دوباره ترتیب می دهد تا یک برنامه خط لوله داده شده را بدست آورد.

قطعات را طبق برنامه خط لوله مجددا سفارش می دهد. الگوریتم زمان‌بندی متکی بر تابع اتفاق می‌افتد که دو قطعه f1 و f2 را به عنوان آرگومان می‌گیرد و بررسی می‌کند که آیا f1 باید قبل از f2 برنامه‌ریزی شود یا خیر. این تابع مستلزم این است که:

  • f1 و f2 به یک مش اختصاص داده می شوند،
  • f1 و f2 هر دو واحدهای زمانبندی هستند (یعنی قطعات تعریف شده توسط کاربر با call_counters تعریف شده) و
  • 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 درست است، آنگاه قطعات 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.