Esistono diversi modi per scrivere test delle unità per le pass HLO. Questa pagina descrive il metodo preferito per garantire coerenza e leggibilità.
FileCheck con CHECK righe alternate
La maggior parte delle pass HLO può essere testata utilizzando
i test FileCheck.
Alterna le righe CHECK nei testi del modulo HLO di input e assicurati di utilizzare //
CHECK anziché ; CHECK in modo uniforme come delimitatore FileCheck.
Ad esempio, puoi riscrivere
l'fusion cc_test per un abbonamento priotity_fusion
come segue:
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_));
}
LIT corridore e hlo-opt
Se possibile, utilizza il runner LIT
e hlo-opt e posiziona le linee CHECK localmente accanto all'IR di input a cui
corrispondono. Anche in questo caso, assicurati di utilizzare // CHECK anziché ; CHECK come
delimitatore.
Ad esempio, alcuni test della GPU possono essere scritti come segue:
// 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
}
Script di generazione automatica CHECK
Scrivere manualmente i controlli dei test può richiedere molto lavoro, quindi spesso è più pratico
eseguire un ottimizzatore, esaminare i risultati per assicurarsi che corrispondano alle aspettative
e poi convertire l'HLO ottimizzato in direttive CHECK. Per semplificare questa
procedura, puoi utilizzare
generate_hlo_test_checks.py
per inserire automaticamente le direttive CHECK generate sopra ogni caso di test in un
file HLO.
(Non) attraversamento del grafico
Evita di scrivere test che attraversano i nodi foglia del grafico dei risultati e corrispondono all'operazione prevista. Questi test sono noiosi da scrivere, difficili da leggere rapidamente e più difficili da eseguire il debug e correggere. Utilizza una delle opzioni sopra indicate.