एचएलओ पास के लिए यूनिट टेस्ट लिखना

एचएलओ पास के लिए यूनिट टेस्ट लिखने के अलग-अलग तरीके हैं. इस पेज पर, एक जैसा कॉन्टेंट और पढ़ने में आसानी बनाए रखने का सबसे सही तरीका बताया गया है.

CHECK लाइनों के साथ FileCheck इंटरलीव किया गया

ज़्यादातर एचएलओ पास की जांच, FileCheck टेस्ट का इस्तेमाल करके की जा सकती है. इनपुट एचएलओ मॉड्यूल के टेक्स्ट में CHECK लाइनों को इंटरलीव करें. साथ ही, यह पक्का करें कि FileCheck डेलिमिटर के तौर पर, ; CHECK के बजाय // CHECK का इस्तेमाल किया गया हो.

उदाहरण के लिए, fusion cc_test for a priotity_fusion pass को इस तरह से फिर से लिखा जा सकता है:

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 रनर और hlo-opt का इस्तेमाल करें. साथ ही, CHECK लाइनों को स्थानीय तौर पर इनपुट आईआर के बगल में रखें. फिर से, पक्का करें कि डेलिमिटर के तौर पर ; CHECK के बजाय // CHECK का इस्तेमाल किया गया हो.

उदाहरण के लिए, कुछ जीपीयू टेस्ट इस तरह लिखे जा सकते हैं:

// 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जनरेट होने वाली स्क्रिप्ट

मैन्युअल तरीके से टेस्ट लिखना काफ़ी मुश्किल काम हो सकता है. इसलिए, अक्सर ऑप्टिमाइज़र को चलाना ज़्यादा व्यावहारिक होता है. इसके बाद, नतीजों को पढ़कर यह पक्का करें कि वे उम्मीदों के मुताबिक हैं. इसके बाद, ऑप्टिमाइज़ किए गए एचएलओ को CHECK डायरेक्टिव में बदलें. इस प्रोसेस को आसान बनाने के लिए, generate_hlo_test_checks.py का इस्तेमाल किया जा सकता है. इससे, जनरेट किए गए CHECK डायरेक्टिव, एचएलओ फ़ाइल में हर टेस्ट केस के ऊपर अपने-आप जुड़ जाते हैं.

(Don't) Graph traversal

ऐसे टेस्ट न लिखें जो नतीजे के ग्राफ़ के लीफ़ नोड को ट्रैवर्स करते हैं और अनुमानित ऑप से मेल खाते हैं. इन टेस्ट को लिखना मुश्किल होता है. इन्हें तुरंत पढ़ना मुश्किल होता है. साथ ही, इन्हें डीबग करना और ठीक करना भी मुश्किल होता है. इसके बजाय, ऊपर दिए गए विकल्पों में से किसी एक का इस्तेमाल करें.