بدءًا من 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
، وتتطلّب طُرق 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. لمزيد من المعلومات، يُرجى الاطّلاع على التحقّق من الصحة.