Mulai Android 11, NNAPI menyertakan dua operasi aliran kontrol, IF
dan WHILE
, yang menggunakan model lain sebagai argumen dan mengeksekusinya secara kondisional ( IF
) atau berulang kali ( WHILE
). Hal ini memungkinkan pembuatan model yang menjalankan operasi berbeda berdasarkan nilai masukan atau menjalankan operasi beberapa kali tanpa membuka gulungan. Hal ini penting untuk kasus penggunaan seperti RNN dinamis dan seq2seq.
Dalam NN HAL 1.3, model menggabungkan beberapa subgraf, termasuk subgraf utama yang digunakan untuk menentukan masukan dan keluaran suatu eksekusi. Sebuah subgraf dapat mereferensikan subgraf lain menggunakan operan bertipe SUBGRAPH
. Kerangka kerja dapat mengirimkan operasi aliran kontrol ke akselerator hanya jika akselerator mendukung semua operasi di semua subgraf yang direferensikan oleh operasi aliran kontrol tersebut.
antarmuka HAL
Dalam NN HAL 1.3, definisi yang terkait dengan aliran kontrol ada di types.hal
.
- Jenis operasi
IF
danWHILE
- Jenis operan
SUBGRAPH
dan masa pakai operanSUBGRAPH
yang sesuai - Struktur
Model
yang berisi subgraf utama dan daftar subgraf yang direferensikan - Struktur
Capabilities
yang berisiifPerformance
danwhilePerformance
IDevice.hal
berisi IDevice
, yang metode getSupportedOperations_1_3()
harus memperlakukan IF
dan WHILE
secara berbeda dari operasi lainnya.
IPreparedModel.hal
berisi IPreparedModel
, yang metodenya execute_1_3()
, executeSynchronously_1_3()
, dan executeFenced()
mengambil argumen loopTimeoutDuration
opsional.
Implementasi pengemudi
Untuk contoh penerapan operasi, lihat CpuExecutor::executeIfOperation
dan CpuExecutor::executeWhileOperation
. Untuk contoh logika validasi operasi, lihat validateIfOperation()
dan validateWhileOperation()
.
Perhatikan bahwa penting untuk mendukung operasi aritmatika dan perbandingan pada operan TENSOR_INT32
berbentuk 1
, karena ini dapat digunakan sebagai penghitung loop. Demikian pula, operasi yang menghasilkan operan TENSOR_BOOL8
bentuk 1
harus digunakan dengan kondisi IF
dan WHILE
.
Batas waktu eksekusi loop WHILE habis
Untuk mencegah loop tak terbatas, eksekusi harus dibatalkan jika loop WHILE
membutuhkan waktu lebih lama dari nilai loopTimeoutDuration
yang diteruskan ke panggilan IPreparedModel::execute_1_3()
, IPreparedModel::executeSynchronously_1_3()
, atau IPreparedModel::executeFenced()
(atau nilai default jika dihilangkan).
Validasi
Tes aliran kontrol adalah bagian dari rangkaian tes CTS dan VTS. Untuk informasi lebih lanjut, lihat Validasi .