שליטה בתהליך

החל מאנדרואיד 11, ה-NNAPI כולל שתי פעולות זרימת בקרה, IF ו- WHILE , שלוקחות מודלים אחרים כארגומנטים ומבצעות אותם באופן מותנה ( IF ) או שוב ושוב ( WHILE ). זה מאפשר לבנות מודלים המבצעים פעולות שונות על סמך ערכי הקלט או לבצע פעולות מספר פעמים מבלי להתגלגל. זה חשוב למקרי שימוש כמו RNN דינמי ו-seq2seq.

ב-NN HAL 1.3, המודל משלב מספר תת-גרפים, כולל תת-גרף הראשי המשמש לציון קלט ופלט של ביצוע. תת-גרף יכול להתייחס לתתי-גרפים אחרים באמצעות אופרנדים מסוג SUBGRAPH . המסגרת יכולה לשלוח פעולת זרימת בקרה למאיץ רק אם המאיץ תומך בכל הפעולות בכל התתי-גרפים שמתייחסים לאותה פעולת זרימת בקרה.

ממשקי HAL

ב-NN HAL 1.3, ההגדרות הקשורות לזרימת בקרה הן ב- types.hal .

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. למידע נוסף, ראה אימות .