เช็กลิสต์สำหรับข้อมูลจำเพาะของ StableHLO

ในเอกสารนี้ เราสรุปหลักเกณฑ์สำหรับการตรวจสอบการเปลี่ยนแปลงข้อกำหนดดังกล่าว ปัจจุบันการเปลี่ยนแปลงเหล่านี้มักรวมถึงการตรวจสอบสิ่งต่างๆ ในหลายแหล่งที่มา เอกสารฉบับนี้จึงสรุปการเปลี่ยนแปลงทั้งหมดเพื่อลดความซับซ้อนของการตรวจสอบ

  1. ตรวจสอบว่าคอลัมน์ "Specification" ใน status.md เขียนว่า "yes" และเพิ่มแถวหากจะใช้คำสั่งใหม่
  2. ตรวจสอบว่าชื่อส่วนตรงกับคำช่วยจำของการดำเนินการใน ODS หรือไม่
  3. ตรวจสอบว่าส่วน "Semantics" ตรงกับความหมายของการดำเนินการของ XLA หรือไม่
  4. ตรวจสอบว่าส่วน "อินพุต" และ "เอาต์พุต" มีลักษณะดังต่อไปนี้หรือไม่
    1. แสดงรายการเดียวกันกับ ODS
    2. แสดงรายการเดียวกันกับ HloInstruction::CreateFromProto
    3. มีการสั่งซื้อเหมือนกับ ODS
    4. หากมีข้อมูลที่ไม่ตรงกัน ให้ตรวจสอบว่ามีคำขอแจ้งปัญหาที่เกี่ยวข้องหรือไม่
  5. ตรวจสอบว่าส่วน "ข้อจำกัด" มีลักษณะดังนี้
    1. ตรงกับ shape_inference.cc ของ XLA
    2. ตรงกับ hlo_verifier.cc ของ XLA
    3. ตรงกับ ODS
    4. ตรงกับ StablehloOps.cpp
    5. หากมีข้อมูลที่ไม่ตรงกัน ให้ตรวจสอบว่ามีคำขอแจ้งปัญหาที่เกี่ยวข้องหรือไม่ ลิงก์ตั๋วทั้งหมดในข้อกำหนดนั้นๆ ในสถานที่ที่เจาะจงที่สุดเท่าที่จะเป็นไปได้ (เช่น หากตั๋วเกี่ยวข้องกับข้อจำกัดที่ยังไม่ได้ใช้ ให้ลิงก์ตั๋วในข้อจำกัดนั้น)
    6. หากส่วนที่เกี่ยวข้องของ ODS และ StablehloOps.cpp ตรงกับข้อกำหนด ให้ตรวจสอบว่าคอลัมน์ "การยืนยัน" และ "การอนุมานประเภท" ใน status.md ระบุว่า "ใช่"
  6. ตรวจสอบว่าส่วน "ตัวอย่าง" มีลักษณะดังต่อไปนี้หรือไม่
    1. มีตัวอย่างเดียวเท่านั้น (ในอนาคต เราจะลิงก์ไปยังตัวอย่างเพิ่มเติมจากชุดทดสอบล่ามของ StableHLO)
    2. ใช้ไวยากรณ์ MLIR ที่ถูกต้องโดยเรียกใช้ stablehlo-opt ในตัวอย่างโค้ด
    3. ใช้ไวยากรณ์ MLIR ทั่วไปซึ่งได้รับจากการเรียกใช้ stablehlo-opt -mlir-print-op-generic (เรายึดตามไวยากรณ์ทั่วไปในข้อกำหนดเพื่อจะได้ไม่ต้องเปลี่ยนข้อมูลจำเพาะของการเปลี่ยนแปลง Preprinter)
  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 เพื่อให้ครอบคลุมตรรกะความสามารถในการคาดเดา