Cada vez mais as GPUs estão sendo usadas para tarefas não gráficas, como cálculos de risco, cálculos de dinâmica de fluidos e análise sísmica. O que nos impede de adotar dispositivos baseados em GPU?
A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas voltado para a comunidade.
A questão
O leitor SuperUser Ell se mantém atualizado com as novidades de tecnologia e está curioso para saber por que não estamos usando mais sistemas baseados em GPU:
Parece-me que hoje em dia muitos cálculos são feitos na GPU. Obviamente, os gráficos são feitos lá, mas usando CUDA e similares, AI, algoritmos de hash (pense em Bitcoins) e outros também são feitos na GPU. Por que não podemos simplesmente nos livrar da CPU e usar a GPU por conta própria? O que torna a GPU muito mais rápida do que a CPU?
Por que de fato? O que torna a CPU única?
A resposta
O contribuidor do SuperUser, DragonLord, oferece uma visão geral bem fundamentada das diferenças entre GPUs e CPUs:
Resposta TL; DR: As GPUs têm muito mais núcleos de processador do que CPUs, mas como cada núcleo de GPU é executado significativamente mais lento do que um núcleo de CPU e não tem os recursos necessários para sistemas operacionais modernos, eles não são apropriados para executar a maior parte do processamento na computação diária. Eles são mais adequados para operações de computação intensiva, como processamento de vídeo e simulações físicas.
A resposta detalhada: GPGPU ainda é um conceito relativamente novo. As GPUs foram inicialmente usadas apenas para renderizar gráficos; À medida que a tecnologia avançava, o grande número de núcleos em GPUs em relação a CPUs foi explorado pelo desenvolvimento de recursos computacionais para GPUs de forma que pudessem processar muitos fluxos paralelos de dados simultaneamente, não importando quais fossem esses dados. Embora as GPUs possam ter centenas ou mesmo milhares de processadores de fluxo, cada uma delas funciona mais lentamente do que um núcleo de CPU e tem menos recursos (mesmo que sejam Turing completo e pode ser programado para executar qualquer programa que uma CPU possa executar). Os recursos ausentes nas GPUs incluem interrupções e memória virtual, que são necessários para implementar um sistema operacional moderno.
Em outras palavras, CPUs e GPUs têm arquiteturas significativamente diferentes que os tornam mais adequados para tarefas diferentes. Uma GPU pode lidar com grandes quantidades de dados em muitos fluxos, realizando operações relativamente simples neles, mas não é adequada para processamento pesado ou complexo em um único ou poucos fluxos de dados. Uma CPU é muito mais rápida por núcleo (em termos de instruções por segundo) e pode executar operações complexas em um único ou alguns fluxos de dados com mais facilidade, mas não pode lidar com muitos fluxos simultaneamente.
Como resultado, as GPUs não são adequadas para lidar com tarefas que não se beneficiam significativamente ou não podem ser paralelizadas, incluindo muitos aplicativos comuns de consumo, como processadores de texto. Além disso, as GPUs usam uma arquitetura fundamentalmente diferente; seria necessário programar um aplicativo especificamente para uma GPU para que funcionasse, e técnicas significativamente diferentes são necessárias para programar as GPUs. Essas diferentes técnicas incluem novas linguagens de programação, modificações em linguagens existentes e novos paradigmas de programação que são mais adequados para expressar uma computação como uma operação paralela a ser executada por muitos processadores de fluxo. Para obter mais informações sobre as técnicas necessárias para programar GPUs, consulte os artigos da Wikipedia sobre processamento de fluxo e computação paralela .
As GPUs modernas são capazes de realizar operações vetoriais e aritmética de ponto flutuante, com os cartões mais recentes capazes de manipular números de ponto flutuante de dupla precisão. Frameworks como CUDA e OpenCL permitem que programas sejam escritos para GPUs, e a natureza das GPUs os torna mais adequados para operações altamente paralelizáveis, como na computação científica, onde uma série de placas de computação GPU especializadas podem ser um substituto viável para um pequeno cluster de computação como em Supercomputadores pessoais NVIDIA Tesla . Os consumidores com GPUs modernas com experiência em Folding @ home podem usá-los para contribuir com Clientes GPU , que pode realizar simulações de dobramento de proteínas em velocidades muito altas e contribuir com mais trabalho para o projeto (certifique-se de ler o FAQs primeiro, especialmente aqueles relacionados a GPUs). As GPUs também podem permitir uma melhor simulação de física em videogames usando PhysX, acelerar a codificação e decodificação de vídeo e realizar outras tarefas de computação intensiva. São esses tipos de tarefas que as GPUs são mais adequadas para executar.
A AMD é pioneira em um projeto de processador chamado de Unidade de processamento acelerado (APU) que combina núcleos de CPU x86 convencionais com GPUs. Isso pode permitir que os componentes da CPU e GPU trabalhem juntos e melhorem o desempenho em sistemas com espaço limitado para componentes separados. À medida que a tecnologia continua a avançar, veremos um grau crescente de convergência dessas partes antes separadas. No entanto, muitas tarefas realizadas por sistemas operacionais e aplicativos de PC ainda são mais adequados para CPUs, e muito trabalho é necessário para acelerar um programa usando uma GPU. Como muitos softwares existentes usam a arquitetura x86 e porque as GPUs exigem diferentes técnicas de programação e não possuem vários recursos importantes necessários para os sistemas operacionais, uma transição geral de CPU para GPU para a computação do dia-a-dia é extremamente difícil.
Tem algo a acrescentar à explicação? Soe fora nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui .