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, yürütmenin girdi ve çıkışlarını belirtmek için kullanılan ana alt grafik de dahil olmak üzere birden çok alt grafik içerir. Bir alt grafik, SUBGRAPH
türündeki işlem görenleri kullanarak diğer alt grafiklere başvuruda bulunabilir. Çerçeve, yalnızca hızlandırıcının söz konusu kontrol akışı işlemi tarafından başvurulan tüm alt grafiklerdeki tüm işlemleri desteklemesi durumunda bir hızlandırıcıya kontrol akışı işlemi gönderebilir.
HAL arayüzleri
NN HAL 1.3'te, kontrol akışıyla ilgili tanımlar types.hal
içindedir.
IF
veWHILE
işlem türleriSUBGRAPH
işlem gören türü ve karşılık gelenSUBGRAPH
işlem gören ömrü- Ana alt grafiği ve başvurulan alt grafiklerin listesini içeren
Model
yapısı ifPerformance
vewhilePerformance
içerenCapabilities
yapısı
IDevice.hal
, IDevice
yöntemini içerir. Bu grubun getSupportedOperations_1_3()
yöntemi, IF
ve WHILE
yöntemini diğer işlemlerden farklı şekilde işlemelidir.
IPreparedModel.hal
; execute_1_3()
, executeSynchronously_1_3()
ve executeFenced()
yöntemleri isteğe bağlı bir loopTimeoutDuration
bağımsız değişkeni alan IPreparedModel
öğesini içerir.
Sürücü uygulaması
Örnek işlem uygulaması için CpuExecutor::executeIfOperation
ve CpuExecutor::executeWhileOperation
sayfalarına göz atın.
Örnek işlem doğrulama mantığı için validateIfOperation()
ve validateWhileOperation()
bölümlerine göz atın.
1
şeklinin TENSOR_INT32
işlenenlerinde aritmetik ve karşılaştırma işlemlerinin desteklenmesinin önemli olduğunu unutmayın. Bunlar döngü sayaçları olarak kullanılabilir.
Benzer şekilde, 1
şeklinin TENSOR_BOOL8
işlem görenlerini üreten işlemler IF
ve WHILE
koşullarıyla kullanılmalıdır.
WHILE döngü 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 (ya da atlanırsa varsayılan değerden) daha uzun sürerse yürütme 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.