Kontrol akışı

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.

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.