As GPUs não têm acesso a nenhum hardware conectado ao host.
A execução típica para programas de GPU é:
- dados transferidos da memória do host para a memória do dispositivo da GPU
- dispositivo GPU faz algum processamento
- dados transferidos de volta da memória do dispositivo da GPU para a memória do host
e, em seguida, o host faz algo útil com os dados, como exibi-lo ao usuário ou salvar no arquivo.
A transferência de memória não é gratuita, por isso, normalmente, você precisa acumular dados suficientes e enviá-los para o dispositivo da GPU para que valha a pena.
Outra coisa a considerar é que os dispositivos da GPU são dados paralelos (em oposição a < em> tarefa paralela ). Diferente das CPUs, que podem executar códigos diferentes em paralelo, as GPUs executam o mesmo código em paralelo em dados diferentes. Isso os torna pobres em fazer coisas como ser um servidor web, mas ótimo para certos problemas científicos e matemáticos onde um problema pode ser paralelizado.
Se você precisar de processamento de pacotes de rede de baixa latência, é improvável que as GPUs sejam adequadas. Você precisaria:
- recebe o pacote de rede
- enviá-lo para a GPU (alguma latência)
- processo na GPU
- enviar de volta ao host (mais latência)
A única maneira de as GPUs serem viáveis seria:
- uma análise de pacote único poderia ser paralelizada em vários blocos menores
- você está disposto a esperar que muitos pacotes de rede entrem e analisem muitos deles de uma só vez