نوشتن آزمون‌های واحد برای مجوزهای HLO

روش‌های مختلفی برای نوشتن آزمون واحد برای گذرهای 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 درج کنید.

(عدم) پیمایش گراف

از نوشتن آزمایش‌هایی که گره‌های برگ نمودار نتیجه را پیمایش می‌کنند و با عملگر موردانتظار مطابقت دارند خودداری کنید. نوشتن این آزمایش‌ها خسته‌کننده است، خواندن سریع آن‌ها دشوار است، و اشکال‌زدایی و رفع اشکال آن‌ها دشوارتر است. درعوض از یکی از گزینه‌های بالا استفاده کنید.