Android 11'den itibaren NNAPI, diğer modelleri bağımsız değişken olarak alıp koşullu olarak (IF
) veya tekrar tekrar yürüten (WHILE
) iki kontrol akışı işlemi içerir: IF
ve WHILE
. Bu sayede, giriş değerlerine göre farklı işlemler yürüten veya işlemleri kaldırmadan birden çok kez yürüten modeller oluşturulabilir. Bu, dinamik RNN ve seq2seq gibi kullanım alanları için önemlidir.
NN HAL 1.3'te model, bir yürütmenin giriş 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 operatörleri kullanarak diğer alt grafiklere referans verebilir. Çerçeve, bir kontrol akışı işlemini yalnızca hızlandırıcı bu kontrol akışı işlemi tarafından referans verilen tüm alt grafiklerdeki tüm işlemleri destekliyorsa hızlandırıcıya gönderebilir.
HAL arayüzleri
NN HAL 1.3'te, kontrol akışıyla ilgili tanımlar types.hal
bölümündedir.
IF
veWHILE
işlem türleriSUBGRAPH
operand türü ve buna karşılık gelenSUBGRAPH
operand ömrü- Ana alt grafiği ve referans verilen alt grafiklerin listesini içeren
Model
yapısı Capabilities
ifPerformance
vewhilePerformance
içeren yapı
IDevice.hal
, IDevice
öğesini içerir. getSupportedOperations_1_3()
yöntemi, IF
ve WHILE
öğelerini diğer işlemlerden farklı şekilde ele almalıdır.
IPreparedModel.hal
, IPreparedModel
öğesini içerir. IPreparedModel
öğesinin execute_1_3()
, executeSynchronously_1_3()
ve executeFenced()
yöntemleri 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 CpuExecutor::executeIfOperation
ve CpuExecutor::executeWhileOperation
bölümüne bakın.
Örnek işlem doğrulama mantığı için validateIfOperation()
ve validateWhileOperation()
bölümlerine bakın.
Döngü sayaçları olarak kullanılabilecekleri için 1
şeklindeki TENSOR_INT32
operatörlerinde aritmetik ve karşılaştırma işlemlerinin desteklenmesinin önemli olduğunu unutmayın.
Benzer şekilde, 1
şeklinde TENSOR_BOOL8
operandı üreten işlemler IF
ve WHILE
koşullarıyla 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()
(veya atlanmışsa varsayılan değer) çağrısına iletilen loopTimeoutDuration
değerinden daha uzun sürerse yürütme işlemi iptal edilmelidir.
Doğrulama
Kontrol akışı testleri, CTS ve VTS test paketlerinin bir parçasıdır. Daha fazla bilgi için Doğrulama bölümüne bakın.