بدءًا من Android 11 ، يشتمل 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
، الذي تقوم طرقه executeSynchronously_1_3()
execute_1_3()
executeSynchronously_1_3 () و executeFenced()
بأخذ وسيطة loopTimeoutDuration
اختيارية.
تنفيذ السائق
للحصول على نموذج تنفيذ العملية ، راجع CpuExecutor::executeIfOperation
و CpuExecutor::executeWhileOperation
. للحصول على نموذج منطق التحقق من صحة العملية ، راجع validateIfOperation()
و validateWhileOperation()
.
لاحظ أنه من المهم دعم العمليات الحسابية والمقارنة على معاملات TENSOR_INT32
للشكل 1
، حيث يمكن استخدامها كعدادات حلقية. وبالمثل ، يجب استخدام العمليات التي تنتج معاملات TENSOR_BOOL8
بالشكل 1
مع شروط IF
و WHILE
.
بينما مهلة تنفيذ حلقة
لمنع الحلقات اللانهائية ، يجب إحباط التنفيذ إذا استغرقت حلقة WHILE
وقتًا أطول من قيمة loopTimeoutDuration
التي تم تمريرها إلى استدعاء IPreparedModel::execute_1_3()
execute_1_3 () أو IPreparedModel :: IPreparedModel::executeSynchronously_1_3()
أو IPreparedModel::executeFenced()
(أو القيمة الافتراضية إذا حذفت).
تصديق
تعد اختبارات التحكم في التدفق جزءًا من مجموعات اختبار CTS و VTS. لمزيد من المعلومات ، راجع التحقق من الصحة.