Checklist Spesifikasi StableHLO

Dalam dokumen ini, kami merangkum panduan untuk meninjau perubahan spesifikasi. Saat ini, perubahan ini biasanya memerlukan pemeriksaan beberapa hal di beberapa sumber, sehingga dokumen ini merangkum semuanya untuk menyederhanakan peninjauan:

  1. Pastikan kolom "Specification" di status.md bertuliskan "yes", tambahkan baris jika menambahkan op baru.
  2. Periksa apakah judul bagian cocok dengan mnemonik operasi di ODS.
  3. Periksa apakah bagian "Semantics" cocok dengan Operation Semantics XLA.
  4. Periksa apakah bagian "Input" dan "Output":
    1. Cantumkan item yang sama dengan ODS.
    2. Buat daftar item yang sama dengan HloInstructionsion::CreateFromProto.
    3. Diurutkan persis seperti ODS.
    4. Jika ada ketidakcocokan, periksa apakah ada tiket yang sesuai.
  5. Periksa apakah bagian "Constraints":
    1. Cocok dengan shape_inference.cc XLA.
    2. Cocok dengan hlo_verifier.cc XLA.
    3. Cocok dengan ODS.
    4. Cocok dengan StablehloOps.cpp.
    5. Jika ada ketidakcocokan, periksa apakah ada tiket yang sesuai. Tautkan semua tiket tersebut dalam spesifikasi, di lokasi yang sespesifik mungkin (misalnya, jika tiket berkaitan dengan batasan yang belum diterapkan, tautkan tiket langsung di batasan tersebut).
    6. Jika bagian ODS dan StablehloOps.cpp yang sesuai dengan spesifikasi, periksa apakah kolom "Verifikasi" dan "Inferensi Jenis" dalam status.md menampilkan "yes".
  6. Periksa apakah bagian "Contoh":
    1. Hanya memiliki satu contoh. (Di masa mendatang, kami akan menautkan ke contoh lainnya dari rangkaian pengujian penafsir StableHLO).
    2. Menggunakan sintaksis MLIR yang valid dengan menjalankan stablehlo-opt pada contoh kode.
    3. Menggunakan sintaksis MLIR generik yang dapat diperoleh dengan menjalankan stablehlo-opt -mlir-print-op-generic (kami tetap menggunakan sintaksis generik di spesifikasi untuk menghindari keharusan mengubah spesifikasi pada perubahan cantikprinter).
  7. Pastikan description di ODS operasi:
    1. Menyertakan kalimat pertama spesifikasi.
    2. Kemudian, tautkan ke bagian spesifikasi yang sesuai.
    3. Kemudian gunakan contoh yang sama dengan spesifikasi, tetapi melalui sintaksis cantik yang dapat diperoleh dengan menjalankan stablehlo-opt.
  8. Pastikan file yang terkait dengan penerapan verifikasi dan batasan inferensi jenis mengikuti panduan sebagaimana disebutkan di bawah ini:
    1. Ikuti panduan #1 untuk StablehloOps.td.
    2. Ikuti panduan #2 untuk TypeInference.cpp dan StablehloOps.cpp.
    3. Ikuti panduan #5 untuk ops_stablehlo.mlir.
    4. Ikuti panduan #6 untuk infer_stablehlo.mlir.
  9. Evaluasi pengoperasian untuk efek samping dan spekulatabilitas.
    1. Jika operasi tidak memiliki efek samping dan selalu dapat diprediksi, berikan karakteristik Pure. Hal ini jarang terjadi, karena sebagian besar operasi mengizinkan bentuk dinamis, yang dapat menyebabkan ketidakcocokan bentuk saat runtime, yang merupakan perilaku yang tidak ditentukan. Beberapa operasi juga dapat memiliki perilaku yang tidak ditentukan dalam situasi lain. Sebagian besar operasi tidak memiliki efek samping (harus memiliki karakteristik NoMemoryEffect).
    2. Sebagian besar operasi termasuk dalam salah satu ciri HLO_SpeculatableIf*. Jika operasi tidak cocok dengan salah satu dari operasi tersebut, berikan trait ConditionallySpeculatable dan implementasikan metode antarmuka. Tambahkan pengujian ke stablehlo/tests/ops_speculatability.mlir untuk mencakup logika spekulatabilitas.