ในเอกสารนี้ เราสรุปหลักเกณฑ์สำหรับการตรวจสอบการเปลี่ยนแปลงข้อกำหนดดังกล่าว ปัจจุบันการเปลี่ยนแปลงเหล่านี้มักรวมถึงการตรวจสอบสิ่งต่างๆ ในหลายแหล่งที่มา เอกสารฉบับนี้จึงสรุปการเปลี่ยนแปลงทั้งหมดเพื่อลดความซับซ้อนของการตรวจสอบ
- ตรวจสอบว่าคอลัมน์ "Specification" ใน status.md เขียนว่า "yes" และเพิ่มแถวหากจะใช้คำสั่งใหม่
- ตรวจสอบว่าชื่อส่วนตรงกับคำช่วยจำของการดำเนินการใน ODS หรือไม่
- ตรวจสอบว่าส่วน "Semantics" ตรงกับความหมายของการดำเนินการของ XLA หรือไม่
- ตรวจสอบว่าส่วน "อินพุต" และ "เอาต์พุต" มีลักษณะดังต่อไปนี้หรือไม่
- แสดงรายการเดียวกันกับ ODS
- แสดงรายการเดียวกันกับ HloInstruction::CreateFromProto
- มีการสั่งซื้อเหมือนกับ ODS
- หากมีข้อมูลที่ไม่ตรงกัน ให้ตรวจสอบว่ามีคำขอแจ้งปัญหาที่เกี่ยวข้องหรือไม่
- ตรวจสอบว่าส่วน "ข้อจำกัด" มีลักษณะดังนี้
- ตรงกับ shape_inference.cc ของ XLA
- ตรงกับ hlo_verifier.cc ของ XLA
- ตรงกับ ODS
- ตรงกับ StablehloOps.cpp
- หากมีข้อมูลที่ไม่ตรงกัน ให้ตรวจสอบว่ามีคำขอแจ้งปัญหาที่เกี่ยวข้องหรือไม่ ลิงก์ตั๋วทั้งหมดในข้อกำหนดนั้นๆ ในสถานที่ที่เจาะจงที่สุดเท่าที่จะเป็นไปได้ (เช่น หากตั๋วเกี่ยวข้องกับข้อจำกัดที่ยังไม่ได้ใช้ ให้ลิงก์ตั๋วในข้อจำกัดนั้น)
- หากส่วนที่เกี่ยวข้องของ ODS และ StablehloOps.cpp ตรงกับข้อกำหนด ให้ตรวจสอบว่าคอลัมน์ "การยืนยัน" และ "การอนุมานประเภท" ใน status.md ระบุว่า "ใช่"
- ตรวจสอบว่าส่วน "ตัวอย่าง" มีลักษณะดังต่อไปนี้หรือไม่
- มีตัวอย่างเดียวเท่านั้น (ในอนาคต เราจะลิงก์ไปยังตัวอย่างเพิ่มเติมจากชุดทดสอบล่ามของ StableHLO)
- ใช้ไวยากรณ์ MLIR ที่ถูกต้องโดยเรียกใช้
stablehlo-opt
ในตัวอย่างโค้ด - ใช้ไวยากรณ์ MLIR ทั่วไปซึ่งได้รับจากการเรียกใช้
stablehlo-opt -mlir-print-op-generic
(เรายึดตามไวยากรณ์ทั่วไปในข้อกำหนดเพื่อจะได้ไม่ต้องเปลี่ยนข้อมูลจำเพาะของการเปลี่ยนแปลง Preprinter)
- ตรวจสอบว่า
description
ใน ODS ของการดำเนินการ- ซึ่งครอบคลุมประโยคแรกของข้อกำหนด
- จากนั้นจึงลิงก์ไปยังส่วนที่เกี่ยวข้องของข้อกำหนด
- จากนั้นใช้ตัวอย่างเดียวกันกับข้อกำหนด แต่ใช้ไวยากรณ์ที่สวยงาม ซึ่งสามารถรับได้โดยเรียกใช้
stablehlo-opt
- ตรวจสอบว่าไฟล์ที่เกี่ยวข้องกับการใช้ข้อจํากัดการอนุมานการยืนยันและประเภทเป็นไปตามหลักเกณฑ์ที่ระบุไว้ด้านล่าง
- ปฏิบัติตามหลักเกณฑ์ #1 สำหรับ StablehloOps.td
- ปฏิบัติตามหลักเกณฑ์ #2 สำหรับ TypeInference.cpp และ StablehloOps.cpp
- ปฏิบัติตามหลักเกณฑ์ #5 สำหรับ ops_stablehlo.mlir
- ทำตามคำแนะนำ #6 สำหรับ infer_stablehlo.mlir
- ประเมินการดำเนินการสำหรับผลข้างเคียงและความไม่แน่นอน
- หากการดำเนินการไม่มีผลข้างเคียงและสามารถคาดเดาได้เสมอ ให้ระบุลักษณะของ
Pure
กรณีนี้พบไม่บ่อยนัก เนื่องจากการดำเนินการส่วนใหญ่อนุญาตให้ใช้รูปร่างแบบไดนามิกได้ ซึ่งอาจทำให้รูปร่างไม่ตรงกันขณะรันไทม์ ซึ่งเป็นลักษณะการทำงานที่ไม่ได้กำหนด การดำเนินการบางอย่างอาจมีลักษณะการทำงานที่ไม่ได้กำหนดในสถานการณ์อื่นๆ เช่นกัน การดำเนินการส่วนใหญ่จะไม่มีผลข้างเคียง (ควรมีลักษณะNoMemoryEffect
) - การดำเนินการส่วนใหญ่จัดอยู่ในลักษณะของ
HLO_SpeculatableIf*
หากตัวเลือกไม่ตรงกับข้อใดเลย ให้ระบุลักษณะConditionallySpeculatable
และนำเมธอดของอินเทอร์เฟซไปใช้ เพิ่มการทดสอบไปยังstablehlo/tests/ops_speculatability.mlir
เพื่อให้ครอบคลุมตรรกะความสามารถในการคาดเดา
- หากการดำเนินการไม่มีผลข้างเคียงและสามารถคาดเดาได้เสมอ ให้ระบุลักษณะของ