روش های مختلفی برای نوشتن آزمون واحد برای پاس های HLO وجود دارد. این صفحه روش ترجیحی را برای اطمینان از سازگاری و خوانایی توصیف می کند.
FileCheck
با خطوط CHECK
بهم پیوسته
اکثر پاس های HLO را می توان با استفاده از تست های FileCheck
آزمایش کرد. خطوط CHECK
را در متون ورودی ماژول HLO قرار دهید و مطمئن شوید که از // CHECK
به جای ; CHECK
به عنوان جداکننده FileCheck
به طور یکنواخت ; CHECK
.
به عنوان مثال، می توانید 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
و hlo-opt
در صورت امکان، از LIT
runner و hlo-opt
استفاده کنید و خطوط CHECK
را به صورت محلی در کنار IR ورودی که با آن مطابقت دارند قرار دهید. دوباره، مطمئن شوید که از // CHECK
به جای ; CHECK
به عنوان جداکننده ; CHECK
.
به عنوان مثال، برخی از تست های GPU را می توان به صورت زیر نوشت:
// RUN: hlo-opt %s --platform=gpu --stage=llvm-before-optimizations --xla_gpu_target_config_filename=%S/../../../tools/hlo_opt/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
-generation
نوشتن چک های تست به صورت دستی می تواند کار زیادی باشد، بنابراین اغلب عملی تر است که یک بهینه ساز را اجرا کنید، نتایج را بخوانید تا مطمئن شوید که مطابق با انتظارات هستند، و سپس HLO بهینه شده را به دستورالعمل های CHECK
تبدیل کنید. برای سادهسازی این فرآیند، میتوانید از generate_hlo_test_checks.py
برای درج خودکار دستورالعملهای CHECK
تولید شده در بالای هر مورد آزمایشی در یک فایل HLO استفاده کنید.
(نباید) پیمایش نمودار
از نوشتن تست هایی که گره های برگ نمودار نتیجه را می گذرانند و با عملیات مورد انتظار مطابقت دارند خودداری کنید. نوشتن این تستها خستهکننده، خواندن سریع آنها دشوار، و اشکالزدایی و رفع آنها سختتر است. در عوض از یکی از گزینه های بالا استفاده کنید.