Android 11'den başlayarak NNAPI, diğer modelleri bağımsız değişken olarak alan ve bunları koşullu ( IF
) veya tekrar tekrar ( WHILE
) yürüten IF
ve WHILE
olmak üzere iki kontrol akışı işlemi içerir. Bu, giriş değerlerine göre farklı işlemleri yürüten veya işlemleri açmadan birden çok kez yürüten modellerin oluşturulmasına olanak tanır. Bu, dinamik RNN ve seq2seq gibi kullanım durumları için önemlidir.
NN HAL 1.3'te model, bir yürütmenin girdilerini ve çıktılarını belirtmek için kullanılan ana alt grafik de dahil olmak üzere birden fazla alt grafik içerir. Bir alt grafik, SUBGRAPH
türündeki işlenenleri kullanarak diğer alt grafiklere referans verebilir. Çerçeve, yalnızca hızlandırıcının söz konusu kontrol akışı işlemi tarafından referans verilen tüm alt grafiklerdeki tüm işlemleri desteklemesi durumunda bir hızlandırıcıya bir kontrol akışı işlemi gönderebilir.
HAL arayüzleri
NN HAL 1.3'te kontrol akışına ilişkin tanımlar types.hal
dosyasında yer almaktadır.
-
IF
veWHILE
işlem türleri -
SUBGRAPH
işlenen türü ve karşılık gelenSUBGRAPH
işlenen ömrü - Ana alt grafiği ve başvurulan alt grafiklerin listesini içeren
Model
yapısı -
ifPerformance
vewhilePerformance
içerenCapabilities
yapısı
IDevice.hal
, getSupportedOperations_1_3()
yönteminin IF
ve WHILE
işlemlerini diğer işlemlerden farklı şekilde ele alması gereken IDevice
içerir.
IPreparedModel.hal
IPreparedModel
içerir; bu yöntemlerin execute_1_3()
, executeSynchronously_1_3()
ve executeFenced()
isteğe bağlı bir loopTimeoutDuration
bağımsız değişkeni alır.
Sürücü uygulaması
Örnek bir işlem uygulaması için bkz. CpuExecutor::executeIfOperation
ve CpuExecutor::executeWhileOperation
. Örnek işlem doğrulama mantığı için bkz. validateIfOperation()
ve validateWhileOperation()
.
Şekil 1
TENSOR_INT32
işlenenleri üzerinde aritmetik ve karşılaştırma işlemlerini desteklemenin önemli olduğunu unutmayın; bunlar döngü sayaçları olarak kullanılabilir. Benzer şekilde, şekil 1
TENSOR_BOOL8
işlenenlerini üreten işlemler, IF
ve WHILE
koşullarıyla birlikte kullanılmalıdır.
WHILE döngüsü yürütme zaman aşımı
Sonsuz döngüleri önlemek için, bir WHILE
döngüsü IPreparedModel::execute_1_3()
, IPreparedModel::executeSynchronously_1_3()
veya IPreparedModel::executeFenced()
çağrısına iletilen loopTimeoutDuration
değerinden (veya varsayılan değerden) daha uzun sürerse yürütme durdurulmalıdır. atlanırsa).
Doğrulama
Kontrol akışı testleri, CTS ve VTS test paketlerinin bir parçasıdır. Daha fazla bilgi için bkz . Doğrulama .