এইচএলও পাসের জন্য ইউনিট পরীক্ষা লেখা

এইচএলও পাসের জন্য ইউনিট পরীক্ষা লেখার বিভিন্ন উপায় রয়েছে। এই পৃষ্ঠাটি ধারাবাহিকতা এবং পাঠযোগ্যতা নিশ্চিত করার জন্য পছন্দের পদ্ধতি বর্ণনা করে।

FileCheck CHECK লাইনের সাথে ইন্টারলিভড

বেশিরভাগ HLO পাস FileCheck পরীক্ষা ব্যবহার করে পরীক্ষা করা যেতে পারে। ইনপুট এইচএলও মডিউল পাঠ্যগুলিতে CHECK লাইনগুলি ইন্টারলিভ করুন এবং // CHECK এর পরিবর্তে ব্যবহার করা নিশ্চিত করুন ; CHECK FileCheck ডেলিমিটার হিসাবে অভিন্নভাবে ; CHECK

উদাহরণস্বরূপ, আপনি নিম্নোক্তভাবে একটি priotity_fusion পাসের জন্য fusion cc_test পুনরায় লিখতে পারেন:

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 ব্যবহার করুন, এবং তাদের অনুরূপ ইনপুট IR এর পাশে স্থানীয়ভাবে CHECK লাইন রাখুন। আবার, এর পরিবর্তে // 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 -জেনারেশন স্ক্রিপ্ট

ম্যানুয়ালি পরীক্ষা চেকগুলি লেখা অনেক কাজ হতে পারে, তাই এটি প্রায়শই একটি অপ্টিমাইজার চালানোর জন্য আরও বেশি ব্যবহারিক, ফলাফলগুলি প্রত্যাশার সাথে মেলে তা নিশ্চিত করতে এবং তারপরে অপ্টিমাইজ করা HLO-কে CHECK নির্দেশাবলীতে রূপান্তরিত করে৷ এই প্রক্রিয়াটিকে সহজ করার জন্য, আপনি generate_hlo_test_checks.py ব্যবহার করতে পারেন যাতে একটি HLO ফাইলে প্রতিটি পরীক্ষার ক্ষেত্রে স্বয়ংক্রিয়ভাবে জেনারেট করা CHECK নির্দেশাবলী সন্নিবেশ করা হয়।

(করবেন না) গ্রাফ ট্রাভার্সাল

ফলাফল গ্রাফের লিফ নোড ভ্রমণ করে এবং প্রত্যাশিত অপের সাথে মেলে এমন পরীক্ষা লেখা থেকে বিরত থাকুন। এই পরীক্ষাগুলি লিখতে ক্লান্তিকর, দ্রুত পড়া কঠিন এবং ডিবাগ এবং ঠিক করা আরও কঠিন। পরিবর্তে উপরের বিকল্পগুলির মধ্যে একটি ব্যবহার করুন।