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 টেস্ট স্যুটের অংশ। আরও তথ্যের জন্য, যাচাইকরণ দেখুন।