কন্ট্রোল ফ্লো

Android 11 থেকে শুরু করে, NNAPI-তে দুটি কন্ট্রোল ফ্লো অপারেশন, IF ও WHILE, অন্তর্ভুক্ত থাকে যেগুলি আর্গুমেন্ট হিসেবে অন্যান্য মডেল নেয় এবং কন্ডিশনাল (IF) বা বারবার (WHILE) এক্সিকিউট করে। এটি ইনপুট ভ্যালুর উপর ভিত্তি করে বিভিন্ন অপারেশন এক্সিকিউট করে এমন মডেল কনস্ট্রাক্ট করতে বা আনরোল না করেই একাধিকবার অপারেশন এক্সিকিউট করতে দেয়। এটি ডায়নামিক RNN এবং seq2seq-এর মতো ব্যবহারের ক্ষেত্রে গুরুত্বপূর্ণ।

NN HAL 1.3-এ, মডেলটি একাধিক সাবগ্রাফ অন্তর্ভুক্ত করে, যার মধ্যে প্রধান সাবগ্রাফও রয়েছে যা কোনও এক্সিকিউশনের ইনপুট এবং আউটপুট নির্দিষ্ট করার জন্য ব্যবহৃত হয়। SUBGRAPH ধরনের অপারেন্ড ব্যবহার করে একটি সাবগ্রাফ অন্য সাবগ্রাফকে রেফার করতে পারে। The framework can send a control flow operation to an accelerator only if the accelerator supports all of the operations in all subgraphs referenced by that control flow operation.

HAL ইন্টারফেস

NN HAL 1.3-এ, কন্ট্রোল ফ্লো সম্পর্কিত সংজ্ঞাগুলি types.hal-এ রয়েছে।

  • IF এবং WHILE অপারেশনের ধরন
  • SUBGRAPH অপারেন্ডের ধরন এবং সংশ্লিষ্ট SUBGRAPH অপারেন্ডের মেয়াদ
  • Model স্ট্রাকচার যাতে মূল সাবগ্রাফ ও রেফারেন্স করা সাবগ্রাফের তালিকা থাকে
  • Capabilities স্ট্রাকচার যাতে ifPerformance এবং whilePerformance আছে

IDevice.hal -এ IDevice আছে, যার পদ্ধতি getSupportedOperations_1_3()-কে অবশ্যই IF এবং WHILE-কে অন্যান্য অপারেশন থেকে আলাদাভাবে ট্রিট করতে হবে।

IPreparedModel.hal IPreparedModel কন্টেন্ট রয়েছে, যার execute_1_3(), executeSynchronously_1_3() এবং executeFenced() পদ্ধতিতে ঐচ্ছিক loopTimeoutDuration আর্গুমেন্ট ব্যবহার করা হয়।

ড্রাইভার প্রয়োগ করা

স্যাম্পেল অপারেশন প্রয়োগ করার জন্য, CpuExecutor::executeIfOperation এবং CpuExecutor::executeWhileOperation দেখুন। স্যাম্পেল অপারেশন যাচাইকরণ লজিক দেখতে, validateIfOperation() এবং validateWhileOperation() দেখুন।

মনে রাখবেন, TENSOR_INT32 শেপের অপারেন্ডের 1 উপর গাণিতিক ও তুলনা অপারেশন কাজ করা গুরুত্বপূর্ণ, কারণ এগুলি লুপ কাউন্টার হিসেবে ব্যবহার করা যেতে পারে। একইভাবে, TENSOR_BOOL8 শেপের অপারেন্ড তৈরি করা অপারেশন 1-কে IF এবং WHILE কন্ডিশনের সাথে ব্যবহার করা উচিত।

WHILE লুপ এক্সিকিউশন টাইমআউট

অসীম লুপ এড়াতে, WHILE লুপের সময় যদি loopTimeoutDuration ভ্যালুর চেয়ে বেশি হয়, তাহলে এক্সিকিউশন বাতিল করতে হবে যা IPreparedModel::execute_1_3(), IPreparedModel::executeSynchronously_1_3(), বা IPreparedModel::executeFenced()-এ কল করার সময় পাস করা হয় (অথবা বাদ দেওয়া হলে ডিফল্ট ভ্যালু)।

যাচাইকরণ

কন্ট্রোল ফ্লো টেস্ট হল CTS ও VTS টেস্ট স্যুটের অংশ। আরও তথ্যের জন্য, যাচাইকরণ দেখুন।