چک لیست مشخصات StableHLO

در این سند، دستورالعمل‌های بررسی تغییرات در مشخصات را خلاصه می‌کنیم. در حال حاضر، این تغییرات معمولاً شامل بررسی چندین چیز در چندین منبع است، بنابراین این سند همه آنها را برای ساده کردن بررسی ها خلاصه می کند:

  1. بررسی کنید که ستون "Specification" در status.md "بله" باشد، در صورت اضافه کردن یک عملیات جدید، یک ردیف اضافه کنید.
  2. بررسی کنید که آیا عنوان بخش با یادداشت عملیات در ODS مطابقت دارد یا خیر.
  3. بررسی کنید که آیا بخش "Semantics" با عملیات Semantics XLA مطابقت دارد یا خیر.
  4. بررسی کنید که آیا بخش‌های «ورودی‌ها» و «خروجی‌ها»:
    1. موارد مشابه ODS را فهرست کنید.
    2. موارد مشابه HloInstruction::CreateFromProto را فهرست کنید.
    3. دقیقاً مانند ODS سفارش داده می شوند.
    4. اگر ناهماهنگی وجود دارد، بررسی کنید که بلیط های مربوطه وجود دارد.
  5. بررسی کنید که آیا بخش "محدودیت ها" است:
    1. با XLA's shape_inference.cc مطابقت دارد.
    2. با hlo_verifier.cc XLA مطابقت دارد.
    3. با ODS مطابقت دارد.
    4. با StablehloOps.cpp مطابقت دارد.
    5. اگر ناهماهنگی وجود دارد، بررسی کنید که بلیط های مربوطه وجود دارد. همه آن بلیت‌های موجود در مشخصات را در مکان‌هایی که تا حد امکان خاص هستند پیوند دهید (مثلاً اگر بلیط مربوط به محدودیتی است که اجرا نشده است، بلیط را درست در آن محدودیت پیوند دهید).
    6. اگر قسمت‌های مربوط به ODS و StablehloOps.cpp با مشخصات مطابقت دارند، بررسی کنید که ستون‌های «Verification» و «Type Inference» در status.md «بله» باشند.
  6. بررسی کنید که آیا بخش "مثال":
    1. فقط یک مثال دارد (در آینده، ما به نمونه های بیشتری از مجموعه تست مترجم StableHLO پیوند خواهیم داد).
    2. با اجرای stablehlo-opt روی نمونه‌های کد، از نحو معتبر MLIR استفاده می‌کند.
    3. از نحو عمومی MLIR استفاده می‌کند که می‌توان با اجرای stablehlo-opt -mlir-print-op-generic به دست آورد (ما به نحو عمومی در مشخصات پایبند هستیم تا از تغییر مشخصات در تغییرات زیبایی چاپگر جلوگیری کنیم).
  7. بررسی کنید که description در ODS عملیات:
    1. شامل اولین جمله از مشخصات است.
    2. سپس به بخش مربوطه از مشخصات پیوند دهید.
    3. سپس از همان مثال به عنوان مشخصات استفاده می کند، اما از طریق نحو زیبا که می توان با اجرای stablehlo-opt به دست آورد.
  8. بررسی کنید که فایل‌های مربوط به اجرای محدودیت‌های تایید و استنتاج نوع از دستورالعمل‌های ذکر شده در زیر پیروی می‌کنند:
    1. دستورالعمل شماره 1 را برای StablehloOps.td دنبال کنید.
    2. دستورالعمل شماره 2 را برای TypeInference.cpp و StablehloOps.cpp دنبال کنید.
    3. دستورالعمل شماره 5 را برای ops_stablehlo.mlir دنبال کنید.
    4. دستورالعمل شماره 6 را برای infer_stablehlo.mlir دنبال کنید.
  9. این عملیات را از نظر عوارض جانبی و قابلیت حدس و گمان ارزیابی کنید.
    1. اگر عملیات هیچ عوارض جانبی ندارد و همیشه قابل حدس و گمان است، صفت Pure را به آن بدهید. این به ندرت اتفاق می‌افتد، زیرا اکثر عملیات‌ها به اشکال پویا اجازه می‌دهند، که ممکن است منجر به عدم تطابق شکل در زمان اجرا شود، که رفتاری تعریف‌نشده است. برخی از عملیات ها می توانند در موقعیت های دیگر نیز رفتار نامشخصی داشته باشند. اکثریت قریب به اتفاق عملیات ها عوارض جانبی ندارند (آنها باید ویژگی NoMemoryEffect را داشته باشند).
    2. اکثر عملیات‌ها در یکی از ویژگی‌های HLO_SpeculatableIf* قرار می‌گیرند. اگر عملیات در هیچ یک از آن‌ها قرار نمی‌گیرد، ویژگی ConditionallySpeculatable را به آن بدهید و متدهای واسط را اجرا کنید. تست هایی را به stablehlo/tests/ops_speculatability.mlir اضافه کنید تا منطق حدس و گمان را پوشش دهد.