कंट्रोल फ़्लो

एंड्रॉइड 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 मान से अधिक समय लगता है, तो निष्पादन को निरस्त कर दिया जाना चाहिए। यदि छोड़ दिया जाए)।

मान्यकरण

नियंत्रण प्रवाह परीक्षण सीटीएस और वीटीएस परीक्षण सूट का हिस्सा हैं। अधिक जानकारी के लिए, सत्यापन देखें।