Descoberta e atribuição de dispositivos

No Android 10, a API Neural Networks (NNAPI) introduz funções que permitem que bibliotecas e apps de framework de machine learning recebam informações sobre os dispositivos disponíveis e especifiquem em quais dispositivos executar um modelo. O fornecimento de informações sobre os dispositivos disponíveis permite que os apps saibam a versão exata dos drivers encontrados no dispositivo, evitando incompatibilidades conhecidas. Ao conceder aos apps a capacidade de especificar quais dispositivos devem executar seções diferentes de um modelo, os apps podem ser otimizados para o produto em que são implantados.

O suporte para descoberta e atribuição de dispositivos é necessário para implementações da NN HAL 1.2.

Implementação

Para oferecer suporte aos recursos de descoberta e atribuição de dispositivos na NNAPI, implemente getType e getVersionString em IDevice.hal para permitir que o framework receba o tipo de dispositivo e a versão do driver.

Para cada dispositivo, especifique o tipo como uma das categorias abaixo, conforme especificado em DeviceType em types.hal.

  • OTHER:um dispositivo que não se enquadra em nenhuma das outras categorias, incluindo uma interface heterogênea, que é uma única interface IDevice que gerencia vários dispositivos, possivelmente de tipos diferentes. Um driver com uma interface heterogênea também precisa expor interfaces IDevice separadas que correspondam a dispositivos individuais para permitir que um aplicativo escolha entre esses dispositivos.
  • CPU:uma CPU com um ou vários núcleos.
  • GPU:uma GPU que pode executar modelos NNAPI e acelerar APIs gráficas, como OpenGL ES e Vulkan.
  • ACCELERATOR:uma unidade de processamento neural (NPU, na sigla em inglês) dedicada.

Implemente getVersionString em IDevice.hal para acessar a string da versão da implementação do dispositivo. Esse método precisa retornar uma string legível. O formato da string é específico do fornecedor. A string da versão precisa ser diferente para cada nova versão de um driver.

O nome da interface IDevice precisa seguir o formato {VENDOR}-{DEVICE_NAME}.