Kontrol akışı

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.

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.