एंड्रॉइड 11 से शुरू होकर, एनएनएपीआई में दो नियंत्रण प्रवाह संचालन, IF
और WHILE
शामिल हैं, जो अन्य मॉडलों को तर्क के रूप में लेते हैं और उन्हें सशर्त ( IF
) या बार-बार ( WHILE
) निष्पादित करते हैं। यह ऐसे मॉडल बनाने की अनुमति देता है जो इनपुट मानों के आधार पर अलग-अलग ऑपरेशन निष्पादित करते हैं या बिना अनियंत्रित हुए कई बार ऑपरेशन निष्पादित करते हैं। यह डायनामिक RNN और seq2seq जैसे उपयोग के मामलों के लिए महत्वपूर्ण है।
एनएन एचएएल 1.3 में, मॉडल में कई सबग्राफ शामिल हैं, जिसमें मुख्य सबग्राफ भी शामिल है जिसका उपयोग निष्पादन के इनपुट और आउटपुट को निर्दिष्ट करने के लिए किया जाता है। एक सबग्राफ SUBGRAPH
प्रकार के ऑपरेंड का उपयोग करके अन्य सबग्राफ को संदर्भित कर सकता है। फ्रेमवर्क एक नियंत्रण प्रवाह ऑपरेशन को त्वरक पर तभी भेज सकता है जब त्वरक उस नियंत्रण प्रवाह ऑपरेशन द्वारा संदर्भित सभी सबग्राफ में सभी परिचालनों का समर्थन करता है।
एचएएल इंटरफेस
एनएन एचएएल 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
लूप को IPreparedModel::execute_1_3()
, IPreparedModel::executeSynchronously_1_3()
, या IPreparedModel::executeFenced()
(या डिफ़ॉल्ट मान) के कॉल पर पारित loopTimeoutDuration
मान से अधिक समय लगता है, तो निष्पादन को निरस्त कर दिया जाना चाहिए। यदि छोड़ दिया जाए)।
मान्यकरण
नियंत्रण प्रवाह परीक्षण सीटीएस और वीटीएस परीक्षण सूट का हिस्सा हैं। अधिक जानकारी के लिए, सत्यापन देखें।