روشهای مختلفی برای نوشتن آزمون واحد برای گذرهای HLO وجود دارد. این صفحه روش ترجیحی را برای اطمینان از سازگاری و خوانایی شرح میدهد.
FileCheck با CHECK خط درهمآمیخته
اکثر مجوزهای HLO را میتوان بااستفاده از
FileCheck آزمایش کرد.
CHECK خط را در متنهای واحد HLO ورودی درهم کنید و مطمئن شوید که بهطور یکنواخت بهجای ; CHECK از //
CHECK بهعنوان جداکننده FileCheck استفاده کنید.
برای مثال، میتوانید
fusion cc_test را برای کارت priotity_fusion
بهصورت زیر بازنویسی کنید:
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 runner و hlo-opt
درصورت امکان، از LIT دونده
و hlo-opt استفاده کنید و CHECK خط را بهصورت محلی در کنار IR ورودی که
با آن مطابقت دارند قرار دهید. دوباره، مطمئن شوید که از // CHECK بهجای ; CHECK بهعنوان
جداکننده استفاده میکنید.
برای مثال، برخیاز آزمایشهای GPU را میتوان بهصورت زیر نوشت:
// 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
}
دستورگان تولید خودکار CHECK
نوشتن دستی بررسیهای آزمایشی میتواند کار زیادی ببرد، بنابراین اغلب عملیتر است که یک بهینهساز را اجرا کنید، نتایج را بخوانید تا مطمئن شوید با انتظارات مطابقت دارند، و سپس HLO بهینهشده را به دستورالعملهای CHECK تبدیل کنید. برای ساده کردن این فرایند، میتوانید از
generate_hlo_test_checks.py
استفاده کنید تا دستورات CHECK تولیدشده را بهطور خودکار در بالای هر مورد آزمون در فایل
HLO درج کنید.
(عدم) پیمایش گراف
از نوشتن آزمایشهایی که گرههای برگ نمودار نتیجه را پیمایش میکنند و با عملگر موردانتظار مطابقت دارند خودداری کنید. نوشتن این آزمایشها خستهکننده است، خواندن سریع آنها دشوار است، و اشکالزدایی و رفع اشکال آنها دشوارتر است. درعوض از یکی از گزینههای بالا استفاده کنید.