Dalam dokumen ini, kami merangkum panduan untuk mengimplementasikan dan meninjau op untuk penafsir. Kami sengaja menyertakan beberapa item tindakan tambahan terkait pemverifikasi dan inferensi jenis, dengan tujuan untuk membuat progres di antarmuka tersebut bersama implementasi penafsir.
Saat menerapkan pengoperasian
- Sediakan strategi pengujian yang ditulis secara eksplisit (dalam deskripsi PR) yang serupa dengan ini untuk digunakan sebagai referensi saat meninjau metode inferensi verifikasi dan jenis, serta pengujian yang sesuai. Peninjau akan memeriksa ulang apakah deskripsi sudah komprehensif.
- Lihat hlo_evaluator untuk mengidentifikasi detail implementasi yang rumit dan potensi celah fungsionalitas.
- Ajukan tiket untuk komponen software yang sesuai jika Anda menemukan bug atau fungsi yang hilang.
Setelah menerapkan pengoperasian
Di StablehloOps.td:
- Pastikan
summary
di ODS pengoperasian mengikuti format standar. (tiket terkait) Tambahkan komentar yang merujuk ke label batasan (misalnya
Cn
atauIn
) dari spesifikasi dalam formatxyz_cn
atauxyz_in
, untuk operasiXyzOp
, guna mengidentifikasi korespondensi antara batasan dalam ODS dan spesifikasi. Contoh berikut menunjukkan cara menambahkan label batasan sebagai komentar bersama mlirTraits
danTypeConstraints
. Perhatikan bahwaxyz_c4
mengacu pada batasan yang ditentukan dalam classStableHLO_FooOp
(misalnyaStableHLO_ShapedInterfaceOp
,StableHLO_UnaryElementwiseOp
,StableHLO_Op
, dll.).def StableHLO_XyzOp: StableHLO_FooOp<"xyz", [Trait1, Trait2 /*xyz_c1, xyz_c2*/, InferTensorType /*xyz_c3*/]> { /*xyz_c4*/ ... let summary = "Xyz operation"; let arguments = (ins 1DTensorOf<[HLO_Float]>:$a, /*xyz_c5, xyz_i1*/ HLO_Tensor:$b, /*xyz_i2*/ .... ); );
- Pastikan
Di TypeInference.cpp dan StablehloOps.cpp:
- Hapus komentar yang menyatakan hal-hal seperti "Verifikasi properti berikut: ...".
- Tambahkan komentar yang merujuk pada label batasan (misalnya
Cn
atauIn
) dari spesifikasi dalam formatxyz_cn
atauxyz_in
, untuk operasiXyzOp
, guna mengidentifikasi bagian pemverifikasi dan fungsi bentuk mana yang sesuai dengan batasan dalam spesifikasi.- Anda dapat membuat komentar dengan beberapa label batasan atau memiliki beberapa komentar dengan label batasan yang sama. Ini semua tergantung pada
bagaimana batasan tersebut diimplementasikan. Jika ada batasan berturut-turut, ringkas sebagai
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - Jika ada ketidakcocokan antara batasan dalam implementasi VS dan batasan dalam spesifikasi, pastikan ada masalah terbuka yang mencerminkan perbedaan tersebut.
- Anda dapat membuat komentar dengan beberapa label batasan atau memiliki beberapa komentar dengan label batasan yang sama. Ini semua tergantung pada
bagaimana batasan tersebut diimplementasikan. Jika ada batasan berturut-turut, ringkas sebagai
Dalam pengujian penerjemah:
- Tambahkan file bernama
interpret_<op_mnemonic>.mlir
. - Tulis pengujian dengan mengikuti pedoman pengujian.
- Tambahkan file bernama
Dalam direktori testdata:
- Menjalankan pengujian nonaktif yang dicakup oleh operasi yang baru ditambahkan.
- Jika pengujian lulus, aktifkan pengujian dengan mengonversi
RUN-DISABLED
menjadiRUN
. - Jika pengujian gagal karena alasan selain ketidakcocokan presisi, perbaiki implementasi/pengujian.
- Untuk ketidakcocokan presisi, beri tag pada pengujian dengan
RUN-DISABLED(#1278)
(jika belum dilakukan).
-
- Pastikan setidaknya ada satu pengujian (positif atau negatif) untuk setiap batasan dalam metode inferensi jenis dan pemverifikasi; batasan yang dicakup dalam ODS tidak akan diuji. Pengujian ini sebagian besar akan bernilai negatif, yang menguji bahwa batasan tidak terpenuhi atau positif, menguji bahwa bentuk yang disimpulkan sudah benar.
- Pastikan semua pengujian yang terkait dengan operasi yang sedang diuji ditempatkan bersama.
- Pastikan semua pengujian yang terkait dengan operasi yang sedang diuji
diawali dengan makro
CHECK-LABEL
yang menyala. - Pilih nama fungsi pengujian menggunakan format
xyz_cn_im_...
untuk batasan pengujian fungsiCn
,Im
, dll. untuk opXyzOp
. Jika format yang diusulkan tidak berlaku, pertahankan nama yang ada. - Setelah langkah di atas selesai, urutkan semua pengujian yang terkait dengan operasi yang sedang diuji menurut abjad berdasarkan nama fungsi.
- Terus tambahkan pengujian hingga ccov menampilkan cakupan >= 90% untuk operasi tersebut.
Pada infer_stablehlo.mlir:
- Pastikan semua batasan yang terkait dengan pengujian inferensi bentuk ada dalam file ini, dengan mengikuti panduan penamaan yang sama seperti yang disebutkan di atas.
- Pindahkan pengujian inferensi bentuk dari file ops_stablehlo.mlir ke dalam file ini.
Di spec.md:
- Tambahkan link ke
interpret_<op_mnemonic>.mlir
ke bagian "Contoh" (misalnya, Contoh Lainnya). - Pastikan spesifikasi hanya memiliki 1 contoh.
- Pastikan contoh spesifikasi mengikuti panduan pengujian.
- Pastikan pengujian contoh spesifikasi dapat ditafsirkan.
- Pastikan contoh spesifikasinya sama dengan yang ada di ODS.
- Tambahkan link ke
Di status.md:
- Perbarui kolom "Penerjemah" menjadi
yes
.
- Perbarui kolom "Penerjemah" menjadi