Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

控制流

從Android 11開始,NNAPI包括兩個控制流操作IFWHILE ,它們將其他模型作為參數並有條件地執行( IF )或重複執行( WHILE )。這允許構建基於輸入值執行不同操作或多次執行操作而無需展開的模型。這對於動態RNN和seq2seq等用例很重要。

在NN HAL 1.3中,模型包含多個子圖,包括用於指定執行的輸入和輸出的主子圖。子圖可以使用SUBGRAPH類型的操作數引用其他子圖。僅當加速器支持該控制流操作引用的所有子圖中的所有操作時,框架才能向該加速器發送控制流操作。

HAL接口

在NN HAL 1.3中,與控制流相關的定義在types.hal

IDevice.hal包含IDevice ,其方法getSupportedOperations_1_3()必須將IFWHILE與其他操作區別對待。

IPreparedModel.hal包含IPreparedModel ,其方法execute_1_3()executeSynchronously_1_3()executeFenced()帶有可選的loopTimeoutDuration參數。

驅動程序實施

有關示例操作的實現,請參見CpuExecutor::executeIfOperationCpuExecutor::executeWhileOperation 。有關示例操作驗證邏輯,請參見validateIfOperation()validateWhileOperation()

請注意,對形狀為1 TENSOR_INT32操作數支持算術和比較運算很重要,因為它們可以用作循環計數器。同樣,在IFWHILE條件下,應使用產生形狀1 TENSOR_BOOL8操作數的操作。

WHILE循環執行超時

為了防止無限循環,如果WHILE循環花費的時間比傳遞給IPreparedModel::execute_1_3()IPreparedModel::executeSynchronously_1_3()IPreparedModel::executeFenced()的調用的loopTimeoutDuration值長(或默認值IPreparedModel::executeSynchronously_1_3() ,則必須中止執行如果省略)。

驗證方式

控制流測試是CTS和VTS測試套件的一部分。有關更多信息,請參見驗證