نوشتن آزمون های واحد برای پاس های HLO

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

(نباید) پیمایش نمودار

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