Ada berbagai cara untuk menulis pengujian unit untuk penerusan HLO. Halaman ini menjelaskan metode yang lebih disukai untuk memastikan konsistensi dan keterbacaan.
FileCheck dengan CHECK baris yang saling terkait
Sebagian besar operan HLO dapat diuji menggunakan tes
FileCheck.
Selang-selingi baris CHECK dalam teks modul HLO input, dan pastikan untuk menggunakan //
CHECK, bukan ; CHECK secara seragam sebagai pemisah FileCheck.
Misalnya, Anda dapat menulis ulang
fusion cc_test untuk lulus priotity_fusion
sebagai berikut:
TEST_F(PriorityFusionTest, FuseBroadcastIntoBitcastConsumers) {
absl::string_view kHlo = R"(
HloModule test_module
// CHECK: ENTRY main
ENTRY main {
// CHECK-NEXT: %[[PARAM:.*]] = f32[96]{0} parameter(0)
param_0 = f32[96]{0} parameter(0)
broadcast = f32[8,96,128,7]{3,2,1,0} broadcast(param_0), dimensions={1}
bitcast.6079.2 = f32[8,24,4,128,7]{4,3,2,1,0} bitcast(broadcast)
// CHECK-NEXT: ROOT %{ {.*} } fusion(%[[PARAM]]) { {.*} }
ROOT transpose.1990.2 = f32[8,24,128,7,4]{4,3,2,1,0} transpose(bitcast.6079.2), dimensions={0,1,3,4,2}
}
)";
RunAndFilecheckHloRewrite(kHlo, std::move(priority_fusion_));
}
Pelari LIT dan hlo-opt
Jika memungkinkan, gunakan peluncur LIT
dan hlo-opt, lalu tempatkan baris CHECK secara lokal di samping IR input yang sesuai. Sekali lagi, pastikan untuk menggunakan // CHECK, bukan ; CHECK sebagai
pembatas.
Misalnya, beberapa pengujian GPU dapat ditulis sebagai berikut:
// RUN: hlo-opt %s --platform=gpu --stage=llvm-before-optimizations --xla_gpu_target_config_filename=%S/../../../backends/gpu/specs/%{GPU}.txtpb | FileCheck --check-prefixes=CHECK-%{PTX} %s
HloModule Test, is_scheduled=true
fused_computation {
param_0 = f32[100,200]{1,0} parameter(0)
ROOT b.1 = f32[200,100]{1,0} transpose(f32[100,200]{1,0} param_0), dimensions={1,0}
}
ENTRY main {
a = f32[100, 200]{1,0} parameter(0)
// CHECK-PTX: call void @llvm.nvvm.barrier0
// CHECK-GCN: call void @llvm.amdgcn.s.barrier
ROOT wrapped_b = f32[200,100]{1,0} fusion(f32[100,200]{1,0} a), kind=kInput, calls=fused_computation
}
Skrip pembuatan CHECK otomatis
Menulis pemeriksaan pengujian secara manual bisa menjadi pekerjaan yang berat, jadi sering kali lebih praktis untuk menjalankan pengoptimal, membaca hasilnya untuk memastikan hasilnya sesuai dengan ekspektasi, lalu mengonversi HLO yang dioptimalkan menjadi direktif CHECK. Untuk menyederhanakan proses ini, Anda dapat menggunakan generate_hlo_test_checks.py untuk otomatis menyisipkan direktif CHECK yang dihasilkan di atas setiap kasus pengujian dalam file HLO.
(Jangan) Traversal grafik
Jangan menulis pengujian yang menjelajahi node daun grafik hasil dan cocok dengan op yang diharapkan. Pengujian ini membosankan untuk ditulis, sulit dibaca dengan cepat, dan lebih sulit di-debug dan diperbaiki. Sebagai gantinya, gunakan salah satu opsi di atas.