Android 11'den itibaren NNAPI, diğer modelleri bağımsız değişken olarak alan ve bunları koşullu olarak (IF
) veya tekrar tekrar (WHILE
) yürüten iki kontrol akışı işlemi (IF
ve WHILE
) 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 modeller oluşturmaya olanak tanır. Bu, dinamik RNN ve seq2seq gibi kullanım alanları için önemlidir.
NN HAL 1.3'te model, bir yürütmenin girişlerini ve çıkış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ı söz konusu kontrol akışı işlemi tarafından referans verilen tüm alt grafiklerdeki tüm işlemleri destekliyorsa hızlandırıcıya bir kontrol akışı işlemi gönderebilir.
HAL arayüzleri
NN HAL 1.3'te kontrol akışıyla ilgili tanımlar types.hal
içinde yer alır.
IF
veWHILE
işlem türleriSUBGRAPH
işlenen türü ve karşılık gelenSUBGRAPH
işlenen ömrüModel
Ana alt grafiği ve referans verilen alt grafiklerin listesini içeren yapıCapabilities
ifPerformance
vewhilePerformance
içeren yapı
IDevice.hal
, IDevice
öğesini içerir. IDevice
öğesinin getSupportedOperations_1_3()
yöntemi, IF
ve WHILE
öğelerini diğer işlemlerden farklı şekilde ele almalıdır.
IPreparedModel.hal
execute_1_3()
, executeSynchronously_1_3()
ve executeFenced()
yöntemleri isteğe bağlı loopTimeoutDuration
bağımsız değişkenini alan IPreparedModel
'ı içerir.
Sürücü uygulaması
Örnek işlem uygulaması için CpuExecutor::executeIfOperation
ve CpuExecutor::executeWhileOperation
sayfalarını inceleyin.
Örnek işlem doğrulama mantığı için
validateIfOperation()
ve
validateWhileOperation()
bölümlerine bakın.
Şekli TENSOR_INT32
olan 1
işlenenlerinde aritmetik ve karşılaştırma işlemlerinin desteklenmesinin önemli olduğunu unutmayın. Bu işlenenler döngü sayaçları olarak kullanılabilir.
Benzer şekilde, 1
şeklindeki 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 WHILE
döngüsü, IPreparedModel::execute_1_3()
, IPreparedModel::executeSynchronously_1_3()
veya IPreparedModel::executeFenced()
çağrısına iletilen loopTimeoutDuration
değerinden (veya atlanırsa varsayılan değerden) daha uzun sürerse yürütme durdurulmalıdır.
Doğrulama
Kontrol akışı testleri, CTS ve VTS test paketlerinin bir parçasıdır. Daha fazla bilgi için Doğrulama başlıklı makaleyi inceleyin.