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:
- Pastikan kolom "Specification" di status.md bertuliskan "yes", tambahkan baris jika menambahkan op baru.
- Periksa apakah judul bagian cocok dengan mnemonik operasi di ODS.
- Periksa apakah bagian "Semantics" cocok dengan Operation Semantics XLA.
- Periksa apakah bagian "Input" dan "Output":
- Cantumkan item yang sama dengan ODS.
- Buat daftar item yang sama dengan HloInstructionsion::CreateFromProto.
- Diurutkan persis seperti ODS.
- Jika ada ketidakcocokan, periksa apakah ada tiket yang sesuai.
- Periksa apakah bagian "Constraints":
- Cocok dengan shape_inference.cc XLA.
- Cocok dengan hlo_verifier.cc XLA.
- Cocok dengan ODS.
- Cocok dengan StablehloOps.cpp.
- 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).
- Jika bagian ODS dan StablehloOps.cpp yang sesuai dengan spesifikasi, periksa apakah kolom "Verifikasi" dan "Inferensi Jenis" dalam status.md menampilkan "yes".
- Periksa apakah bagian "Contoh":
- Hanya memiliki satu contoh. (Di masa mendatang, kami akan menautkan ke contoh lainnya dari rangkaian pengujian penafsir StableHLO).
- Menggunakan sintaksis MLIR yang valid dengan menjalankan
stablehlo-opt
pada contoh kode. - 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).
- Pastikan
description
di ODS operasi:- Menyertakan kalimat pertama spesifikasi.
- Kemudian, tautkan ke bagian spesifikasi yang sesuai.
- Kemudian gunakan contoh yang sama dengan spesifikasi, tetapi melalui sintaksis cantik yang dapat diperoleh dengan menjalankan
stablehlo-opt
.
- Pastikan file yang terkait dengan penerapan verifikasi dan batasan inferensi jenis mengikuti panduan sebagaimana disebutkan di bawah ini:
- Ikuti panduan #1 untuk StablehloOps.td.
- Ikuti panduan #2 untuk TypeInference.cpp dan StablehloOps.cpp.
- Ikuti panduan #5 untuk ops_stablehlo.mlir.
- Ikuti panduan #6 untuk infer_stablehlo.mlir.
- Evaluasi pengoperasian untuk efek samping dan spekulatabilitas.
- 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 karakteristikNoMemoryEffect
). - Sebagian besar operasi termasuk dalam salah satu ciri
HLO_SpeculatableIf*
. Jika operasi tidak cocok dengan salah satu dari operasi tersebut, berikan traitConditionallySpeculatable
dan implementasikan metode antarmuka. Tambahkan pengujian kestablehlo/tests/ops_speculatability.mlir
untuk mencakup logika spekulatabilitas.
- Jika operasi tidak memiliki efek samping dan selalu dapat diprediksi, berikan karakteristik