CUDA / GPU Variedade de construções de programação disponíveis? [fechadas]

1

Existe um limite para a extensão das operações que você pode fazer em uma GPU?

Por exemplo, você pode criar dicionários / hashmaps, como faria em Java ou C #? Que tal receber pacotes de um socket? Você poderia rotea-los através do barramento PCI Express, via CPU e GPU?

Estou interessado em usar a GPU para processar dados de pacote de rede em latência muito baixa.

    
por William 10.01.2012 / 23:27

1 resposta

1

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
por 11.01.2012 / 05:40