از Android 11، «میانای برنامهسازی کاربردی شبکه عصبی» شامل دو
عملکرد جریان کنترل، 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() مراجعه کنید.
توجه داشته باشید که پشتیبانی از عملیاتهای مقایسه و محاسباتی روی
TENSOR_INT32 عملوند با شکل 1 مهم است، زیرا میتوان از آنها بهعنوان شمارنده حلقه استفاده کرد.
بههمین ترتیب، عملیاتی که TENSOR_BOOL8 عملوند با شکل 1 تولید میکند باید با شرایط IF و WHILE استفاده شود.
زمان اتمام اجرای حلقه «WHILE»
برای جلوگیری از حلقههای بینهایت، اگر حلقه WHILE بیشتر از مقدار loopTimeoutDuration که به فراخوانی IPreparedModel::execute_1_3()، IPreparedModel::executeSynchronously_1_3()، یا IPreparedModel::executeFenced() (یا مقدار پیشفرض درصورت حذف) ارسال شده است طول بکشد، اجرا باید متوقف شود.
اعتبارسنجی
آزمایشهای جریان کنترل بخشی از مجموعههای آزمایشی CTS و VTS هستند. برای اطلاعات بیشتر، اعتبارسنجی را ببینید.