Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Arus Kontrol

Mulai dari Android 11, NNAPI menyertakan dua operasi aliran kontrol, IF dan WHILE , yang menggunakan model lain sebagai argumen dan menjalankannya secara bersyarat ( IF ) atau berulang kali ( WHILE ). Hal ini memungkinkan untuk membangun model yang menjalankan operasi berbeda berdasarkan nilai masukan atau menjalankan operasi beberapa kali tanpa membuka gulungan. Ini penting untuk kasus penggunaan seperti RNN dinamis dan seq2seq.

Di NN HAL 1.3, model ini menggabungkan beberapa subgraf, termasuk subgraf utama yang digunakan untuk menentukan input dan output dari suatu eksekusi. Subgraf dapat mereferensikan subgraf lain menggunakan operan berjenis SUBGRAPH . Framework dapat mengirim operasi aliran kontrol ke akselerator hanya jika akselerator mendukung semua operasi di semua subgraf yang direferensikan oleh operasi aliran kontrol tersebut.

Antarmuka HAL

Di NN HAL 1.3, definisi yang terkait dengan aliran kontrol ada di types.hal .

IDevice.hal berisi IDevice , yang metodenya getSupportedOperations_1_3() harus memperlakukan IF dan WHILE berbeda dari operasi lain.

IPreparedModel.hal berisi IPreparedModel , yang metodenya execute_1_3() , executeSynchronously_1_3() , dan executeFenced() mengambil argumen loopTimeoutDuration opsional.

Implementasi driver

Untuk contoh implementasi 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 bentuk 1 , karena ini dapat digunakan sebagai penghitung perulangan. Demikian pula, operasi yang menghasilkan operan TENSOR_BOOL8 bentuk 1 harus digunakan dengan ketentuan IF dan WHILE .

WHILE waktu eksekusi loop habis

Untuk mencegah perulangan tak terbatas, eksekusi harus dibatalkan jika perulangan WHILE membutuhkan waktu lebih lama daripada nilai loopTimeoutDuration 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 .