Menulis pengujian unit untuk kartu HLO

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.