Rilevamento e assegnazione del dispositivo

In Android 10, l'API Neural Networks (NNAPI) introduce funzioni che consentono alle librerie e alle app di framework di machine learning di ottenere informazioni sui dispositivi disponibili e specificare su quali dispositivi eseguire un modello. Fornendo informazioni sui dispositivi disponibili, le app possono ottenere la versione esatta dei driver trovati sul dispositivo per evitare incompatibilità note. Se le app hanno la possibilità di specificare su quali dispositivi eseguire sezioni diverse di un modello, possono essere ottimizzate per il prodotto su cui vengono implementate.

Per le implementazioni NN HAL 1.2 sono necessarie il supporto per il rilevamento e l'assegnazione dei dispositivi.

Implementazione

Per supportare le funzionalità di rilevamento e assegnazione dei dispositivi in NNAPI, implementa getType e getVersionString in IDevice.hal per consentire al framework di ottenere il tipo di dispositivo e la versione del driver.

Per ogni dispositivo, specifica il tipo come una delle seguenti categorie, come indicato in DeviceType in types.hal.

  • OTHER: un dispositivo che non rientra in nessuna delle altre categorie, inclusa un'interfaccia eterogenea, ovvero un'unica interfaccia IDevice che gestisce più dispositivi, eventualmente di tipi diversi. Un driver con un'interfaccia eterogenea deve anche esporre interfacce IDevice separate che corrispondono ai singoli dispositivi per consentire a un'applicazione di scegliere tra questi dispositivi.
  • CPU: CPU single-core o multicore.
  • GPU: una GPU in grado di eseguire modelli NNAPI e accelerare le API di grafica come OpenGL ES e Vulkan.
  • ACCELERATOR: un'unità di elaborazione neurale (NPU) dedicata.

Implementa getVersionString in IDevice.hal per ottenere la stringa della versione dell'implementazione del dispositivo. Questo metodo deve restituire una stringa leggibile. Il formato della stringa è specifico del fornitore. La stringa della versione deve essere diversa per ogni nuova versione del driver.

Il nome dell'interfaccia IDevice deve seguire il formato {VENDOR}-{DEVICE_NAME}.