অ্যান্ড্রয়েড ১১ থেকে, NNAPI-তে IF এবং WHILE দুটি কন্ট্রোল ফ্লো অপারেশন অন্তর্ভুক্ত করা হয়েছে, যেগুলো আর্গুমেন্ট হিসেবে অন্যান্য মডেল গ্রহণ করে এবং সেগুলোকে শর্তসাপেক্ষে ( IF ) অথবা বারবার ( WHILE ) এক্সিকিউট করে। এর ফলে এমন মডেল তৈরি করা যায় যা ইনপুট মানের উপর ভিত্তি করে বিভিন্ন অপারেশন সম্পাদন করে অথবা আনরোলিং ছাড়াই একাধিকবার অপারেশনগুলো এক্সিকিউট করে। ডাইনামিক RNN এবং seq2seq-এর মতো ব্যবহারের ক্ষেত্রে এটি গুরুত্বপূর্ণ।
NN HAL 1.3-এ, মডেলটিতে একাধিক সাবগ্রাফ অন্তর্ভুক্ত রয়েছে, যার মধ্যে প্রধান সাবগ্রাফটি একটি এক্সিকিউশনের ইনপুট এবং আউটপুট নির্দিষ্ট করার জন্য ব্যবহৃত হয়। একটি সাবগ্রাফ SUBGRAPH টাইপের অপারেন্ড ব্যবহার করে অন্যান্য সাবগ্রাফকে রেফারেন্স করতে পারে। ফ্রেমওয়ার্কটি কোনো অ্যাক্সিলারেটরের কাছে একটি কন্ট্রোল ফ্লো অপারেশন তখনই পাঠাতে পারে, যদি অ্যাক্সিলারেটরটি সেই কন্ট্রোল ফ্লো অপারেশন দ্বারা রেফারেন্সকৃত সমস্ত সাবগ্রাফের সমস্ত অপারেশন সমর্থন করে।
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() দেখুন।
উল্লেখ্য যে, 1 আকৃতির TENSOR_INT32 অপারেন্ডের উপর গাণিতিক এবং তুলনা অপারেশন সমর্থন করা গুরুত্বপূর্ণ, কারণ এগুলো লুপ কাউন্টার হিসেবে ব্যবহার করা যেতে পারে। একইভাবে, 1 আকৃতির TENSOR_BOOL8 অপারেন্ড তৈরি করে এমন অপারেশনগুলো IF এবং WHILE শর্তের সাথে ব্যবহার করা উচিত।
WHILE লুপ নির্বাহের সময়সীমা
অসীম লুপ প্রতিরোধ করার জন্য, যদি কোনো WHILE লুপ IPreparedModel::execute_1_3() , IPreparedModel::executeSynchronously_1_3() , বা IPreparedModel::executeFenced() কল করার সময় প্রদত্ত loopTimeoutDuration মানের (অথবা এটি বাদ দেওয়া হলে ডিফল্ট মানের) চেয়ে বেশি সময় নেয়, তবে এক্সিকিউশন অবশ্যই বাতিল করতে হবে।
বৈধতা
কন্ট্রোল ফ্লো টেস্টগুলো CTS এবং VTS টেস্ট স্যুটের অংশ। আরও তথ্যের জন্য, ভ্যালিডেশন দেখুন।