-mpmd-move-transfers-to-producer
نقل و انتقالات را در کنار تولیدکنندگان خود منتقل می کند.
انتقالها را در کنار سازندههایشان جابهجا میکند: اگر عملوند آرگومان بلوکی است، انتقال را به ابتدای بلوک منتقل کنید، در غیر این صورت آن را بعد از عملیات تعریفکننده منتقل کنید.
-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>`.
-mpmd-remat-fragment
قطعات را دوباره مادی می کند.
جفت قطعات (به جلو + عقب) را پیدا می کند که باید دوباره مادی شوند و هر قطعه رو به جلو را قبل از کاربر عقب خود شبیه سازی می کند، همه استفاده های عقب مانده از مقادیر تولید شده توسط قطعه جلو را با همتاهای شبیه سازی شده جایگزین می کند. این می تواند برای فعال سازی مجدد مواد در موازی خط لوله استفاده شود.
وقتی merge_remat_fragments
درست است، آنگاه قطعات remat را در قطعات مصرف کننده آنها ادغام می کنیم.
گزینه ها
-merge-remat-fragments : Whether to merge the remat fragments into their consumer fragments.
-mpmd-scheduling-units-verifier
بررسی می کند که آیا برنامه دارای واحدهای زمان بندی مورد نیاز است یا خیر.