Por que as pessoas usam GPUs para computação de alto desempenho em vez de um chip mais especializado?

105

Pelo meu entendimento, as pessoas começaram a usar GPUs para computação em geral porque são uma fonte extra de poder de computação. E, embora não sejam tão rápidos quanto uma CPU para cada operação, eles têm muitos núcleos, para que possam ser melhor adaptados ao processamento paralelo do que uma CPU. Isso faz sentido se você já possui um computador que possui uma GPU para processamento gráfico, mas não precisa dos gráficos e gostaria de ter mais poder computacional. Mas também entendo que as pessoas compram GPUs especificamente para adicionar poder de computação, sem intenção de usá-las para processar gráficos. Para mim, isso parece semelhante à seguinte analogia:

Preciso cortar minha grama, mas meu cortador de grama está fraco. Então, retiro a gaiola do ventilador da caixa que mantenho no meu quarto e afio as lâminas. Coloco a fita adesiva no cortador de grama e acho que funciona razoavelmente bem. Anos depois, sou o diretor de compras de uma grande empresa de jardinagem. Eu tenho um orçamento considerável para gastar em implementos de corte de grama. Em vez de comprar cortadores de grama, compro um monte de ventiladores de caixa. Mais uma vez, eles funcionam bem, mas tenho que pagar por peças extras (como a gaiola) que não acabarei usando. (para os fins desta analogia, devemos assumir que os cortadores de grama e ventiladores de caixa custam aproximadamente o mesmo)

Então, por que não existe mercado para um chip ou dispositivo que tenha o poder de processamento de uma GPU, mas não a sobrecarga de gráficos? Eu posso pensar em algumas explicações possíveis. Qual deles, se houver, está correto?

  • Essa alternativa seria muito cara de desenvolver quando a GPU já é uma boa opção (os cortadores de grama não existem, por que não usar esse ventilador de caixa perfeitamente bom?).
  • O fato de 'G' representar gráficos indica apenas o uso pretendido e não significa realmente que qualquer esforço seja feito para adaptar melhor o chip ao processamento gráfico do que qualquer outro tipo de trabalho (cortadores de grama e ventiladores de caixa são a mesma coisa quando você vai direto ao ponto; não são necessárias modificações para que uma funcione como a outra).
  • As GPUs modernas têm o mesmo nome de seus antecessores antigos, mas hoje em dia as mais sofisticadas não são projetadas para processar gráficos especificamente (os ventiladores de caixa modernos são projetados para funcionar principalmente como cortadores de grama, mesmo que os mais antigos não fossem).
  • É fácil traduzir praticamente qualquer problema para o idioma do processamento gráfico (a grama pode ser cortada soprando o ar rapidamente).

EDITAR:

Minha pergunta foi respondida, mas com base em alguns comentários e respostas, acho que devo esclarecer minha pergunta. Não estou perguntando por que todo mundo não compra seus próprios cálculos. Claramente, isso seria muito caro na maioria das vezes.

Simplesmente observei que parece haver uma demanda por dispositivos que possam executar rapidamente cálculos paralelos. Fiquei me perguntando por que parece que o dispositivo ideal é a Unidade de processamento gráfico, em oposição a um dispositivo projetado para esse fim.

Alex S
fonte
66
Porque eles são especializados para esse tipo de coisa; é basicamente o mesmo tipo de matemática. E a nVidia construiu e vendeu placas somente GPU para as pessoas fazerem esse tipo de processamento de números paralelos em massa.
Heptite
7
Lembre-se de que temos "unidades" especializadas adicionadas aos chips. O AES é feito em hardware (acho) em CPUs. O AVX também é implementado em hardware. No entanto, onde você para? O fabricante de chips não sabe do que você precisa e a maioria das pessoas não tem capacidade (tecnológica ou financeira) para ter seus próprios chips projetados para tarefas muito específicas. As placas gráficas são - como já foi dito - um tipo de arquitetura especializada, que se presta bem a determinadas tarefas. Eles não são bons para tudo - mas para certas tarefas específicas e, portanto, são usadas lá.
DetlevCM
4
Uma analogia mais precisa substituiria os ventiladores das caixas por colheitadeiras agrícolas de 100 metros de largura.
MooseBoys
6
Meu PC já tem uma GPU pronta para usar, projetar e produzir um chip dedicado me custaria alguns milhões.
precisa saber é o seguinte
19
Tente outra analogia. Suponha que tenhamos ventiladores de caixa e rotores de helicóptero. Em nosso mundo hipotético, os pedidos de ventiladores de caixa precisavam de ventiladores progressivamente maiores, operando em velocidades mais altas, até que acabamos com ventiladores de caixa de 20m de lâmina de fibra de carbono e a produção em massa os tornou baratos. Então alguém percebeu que um ventilador de caixa de 20m é essencialmente apenas um rotor de helicóptero com uma gaiola em torno dele. É realmente assim.
Graham

Respostas:

109

É realmente uma combinação de todas as suas explicações. Mais barato e fácil, já existe, e o design mudou dos gráficos puros.


Uma GPU moderna pode ser vista principalmente como processadores de fluxo com algum hardware gráfico adicional (e alguns aceleradores de função fixa, por exemplo, para codificação e decodificação de vídeo). Atualmente, a programação da GPGPU usa APIs projetadas especificamente para esse fim (OpenCL, Nvidia CUDA, AMD APP).

Nas duas últimas décadas, as GPUs evoluíram de um pipeline de função fixa (basicamente apenas gráficos) para um pipeline programável ( shaders permitem que você escreva instruções personalizadas) para APIs mais modernas, como o OpenCL, que fornecem acesso direto aos núcleos do shader sem o acompanhamento de pipeline de gráficos.

Os bits gráficos restantes são menores. Eles representam uma parte tão pequena do custo do cartão que não é significativamente mais barato deixá-los de fora, e você incorre no custo de um design adicional. Portanto, isso geralmente não é feito - não há equivalente orientado à computação da maioria das GPUs - exceto nas camadas mais altas, e essas são bastante caras.

As GPUs normais para "jogos" são muito usadas porque economias de escala e relativa simplicidade as tornam baratas e fáceis de começar. É um caminho bastante fácil da programação gráfica para acelerar outros programas com o GPGPU. Também é fácil atualizar o hardware, pois estão disponíveis produtos mais novos e mais rápidos, ao contrário das outras opções.


Basicamente, as opções se resumem a:

  • CPU de uso geral, ideal para ramificação e código seqüencial
  • GPU normal para "jogos"
  • GPU orientada à computação, por exemplo, Nvidia Tesla e Radeon Instinct Geralmente, elas não suportam saída de gráficos, portanto a GPU é um pouco inadequada. No entanto, eles usam núcleos de GPU semelhantes às GPUs normais e o código OpenCL / CUDA / APP é mais ou menos diretamente portátil.
  • FPGAs, que usam um modelo de programação muito diferente e tendem a ser muito caros. É aqui que existe uma barreira significativa à entrada. Eles também não são necessariamente mais rápidos que uma GPU, dependendo da carga de trabalho.
  • ASICs, circuitos personalizados (hardware). Isso é muito muito caro e só vale a pena em escala extrema (estamos falando de milhares de unidades, no mínimo), e onde você tem certeza de que o programa nunca precisará mudar. Eles raramente são viáveis ​​no mundo real. Você também terá que reprojetar e testar tudo isso toda vez que a tecnologia avançar - você não pode simplesmente trocar um novo processador como pode com CPUs e GPUs.
Prumo
fonte
16
ASICs também faz sentido quando a computação literalmente paga por si mesmo (mineração de criptografia)
aberração catraca
4
Na verdade, os FPGAs geralmente são piores que os GPUs. O problema é que os FPGAs são muito flexíveis; eles podem implementar muitas operações diferentes. No entanto, a computação geralmente é uma forma de matemática e, na verdade, o volume é apenas duas operações: adição e multiplicação (subtração e divisão são variantes das anteriores). As GPUs são muito, muito boas nessas duas operações, muito mais do que as FPGA.
precisa saber é o seguinte
19
Você precisa esclarecer mais sobre os FPGAs. A ideia de que há um "passo em frente" é um pouco enganadora. Eles são mais um passo para o lado.
Yakk
6
Como exemplo do último, o Google possui suas próprias "unidades de processamento de tensores" para aprendizado de máquina. Até que ponto eles são personalizados não é claro, mas são descritos como sendo ASICs.
mbrig
4
@MSalters Um dos principais pontos de venda de FPGAs sobre GPUs é o desempenho / Watt, que está se tornando mais importante à medida que os data centers começam a atingir o limite máximo (os FPGAs geralmente são mais eficientes em termos de energia). No que diz respeito à matemática, os FPGAs são comparáveis ​​às GPUs na aritmética de ponto fixo e inteiro e apenas ficam atrasados ​​na matemática de ponto flutuante.
Wilcroft 6/06
32

Minha analogia favorita:

  • CPU : um gênio Polymath. Pode fazer uma ou duas coisas ao mesmo tempo, mas essas coisas podem ser muito complexas.
  • GPU : Uma tonelada de trabalhadores pouco qualificados. Cada um deles não pode causar grandes problemas, mas em massa você pode fazer muito. Para sua pergunta, sim, existem algumas despesas gerais de gráficos, mas acredito que são marginais.
  • ASIC / FPGA : Uma empresa. Você pode contratar uma tonelada de trabalhadores pouco qualificados ou alguns gênios, ou uma combinação de trabalhadores e gênios pouco qualificados.

O que você usa depende da sensibilidade ao custo, do grau em que uma tarefa é paralelizável e de outros fatores. Por causa do desempenho do mercado, as GPUs são a melhor opção para as aplicações mais paralelas e as CPUs são a melhor escolha quando a energia e o custo unitário são as principais preocupações.

Diretamente à sua pergunta: por que uma GPU sobre um ASIC / FPGA? Geralmente custo. Mesmo com os preços inflacionados de hoje da GPU, ainda é (geralmente) mais barato usar uma GPU do que projetar um ASIC para atender às suas necessidades. Como @ user912264 aponta, existem tarefas específicas que podem ser úteis para ASICs / FPGAs. Se você tiver uma tarefa única e se beneficiará da escala, pode valer a pena projetar um ASIC / FPGA. De fato, você pode criar / comprar / licenciar projetos de FPGA especificamente para esse fim. Isso é feito para alimentar os pixels em TVs de alta definição, por exemplo.

BobtheMagicMoose
fonte
7
Os comentários não servem para responder de qualquer maneira, e isso me parece uma resposta razoável.
Raimund Krämer
11
@BobtheMogicMoose Mas pode ser muito mais rápido usar um FPGA personalizado projetado para análise genômica do que ter o código equivalente em uma GPU. Quando você está pagando aos cientistas para ficar esperando os resultados, o FPGA mais rápido se paga muito rapidamente.
doneal24
Os FPGAs também estão ficando muito mais acessíveis para o desenvolvedor comum - a Microsoft, por exemplo, possui uma solução de IA em nuvem usando FPGAs (Project BrainWave). A AWS também tem algumas ofertas. Qualquer pessoa pode alugar alguns FPGAs personalizados para tarefas especializadas sem ter que construí-los, não é viável para muitos casos de uso, mesmo alguns anos atrás.
Brichins
Sim, acho que existem até kits de hobby FPGA que são comparáveis ​​a um arduino raspberry-pi. Ainda acho que programar FPGAs é muito mais caro do que arquiteturas mais desenvolvidas.
BobtheMagicMoose
10

Sua analogia é ruim. Na analogia, quando você compra equipamentos para uma grande empresa de tratamento de grama, você supõe que existem bons cortadores de grama disponíveis. Este não é o caso no mundo da computação - as GPUs são a melhor ferramenta prontamente disponível.

Os custos de P&D e os possíveis ganhos de desempenho de um chip especializado provavelmente são altos demais para justificar a sua fabricação.

Dito isso, estou ciente da Nvidia lançando algumas GPUs especificamente para computação de uso geral - elas não tinham saídas de vídeo - um pouco como vender ventiladores de caixa com as gaiolas já removidas.

jstbnfdsrtah
fonte
9

Obviamente, você pode usar chips especializados, seja para eficiência de energia ou velocidade de cálculo. Deixe-me contar a história da mineração de Bitcoin:

  • Bitcoin é novo, os geeks são meus com suas CPUs.
  • O Bitcoin é um pouco novo, os geeks inteligentes são os meus com suas GPUs.
  • O Bitcoin é agora (meio) famoso, as pessoas compram FPGAs.
  • O Bitcoin agora é famoso (2013), mesmo os novatos compram ASICs ("Application Specific Integrated Circuits") para minerar com eficiência.
  • Bloqueie quedas de recompensa (periodicamente), mesmo ASICs antigos não são mais lucrativos.

Portanto, não, não há motivos para usar uma GPU em vez de uma "calculadora gigante" especializada. Quanto maiores os incentivos econômicos, mais o hardware se especializa. No entanto, eles são muito difíceis de projetar e inviáveis ​​de fabricar, se você não estiver produzindo milhares de uma só vez. Se não for viável projetar chips, você pode comprar um desses no Walmart mais próximo.

TL; DR Claro que você pode usar chips mais especializados.

MCCCS
fonte
11
"Claro que você pode usar chips mais especializados" - mas existem chips especializados para bitcoin (SHA-256), depois para litecoin (scrypt) e é isso mesmo. Não existe hardware de computação de alto desempenho para outros problemas. (Ou seja, com desempenho superior às atuais GPUs de última
geração
8

O que você descreve em sua analogia é exatamente o que aconteceu. Assim que você pegou seu ventilador e afiou as lâminas para tentar usá-lo como um cortador de grama, um grupo de pesquisas percebeu "Ei, temos uma unidade de processamento de vários núcleos bastante agradável aqui, vamos tentar usá-lo para cálculos de uso geral! "

O resultado foi bom e a bola começou a rolar. A GPU passou de um dispositivo somente gráfico para dar suporte à computação de uso geral para ajudar nas situações mais exigentes.

De qualquer maneira, a operação mais exigente em termos computacionais que esperamos dos computadores são gráficos. É o suficiente para dar uma olhada nos avanços impressionantes de como os jogos são hoje em comparação com o que eles fizeram apenas alguns anos atrás. Isso significa que muito esforço e dinheiro foram investidos no desenvolvimento das GPUs, e o fato de elas também poderem ser usadas para acelerar uma certa classe de computação de uso geral (isto é, extremamente paralela) acaba de aumentar sua popularidade.

Portanto, em conclusão, a primeira explicação que você oferece é a mais precisa:

  • Essa alternativa seria muito cara de desenvolver quando a GPU já é uma boa opção.

GPUs onde já existem, estão prontamente disponíveis para todos e eles trabalharam.

Mario Chapa
fonte
5
Eu tenho que discordar sobre "a operação mais exigente computacionalmente" ser gráfica, dependendo, é claro, de exatamente quem "nós" somos. Para usuários em geral, sim, mas na comunidade de ciência e engenharia, há muitas coisas mais exigentes que gráficos. Afinal, gráficos aceitáveis ​​(como nos jogos) podem ser feitos com um único PC e GPU de gama média. Problemas significativos geralmente combinam centenas ou milhares dessas unidades para obter desempenho no intervalo petaflop - e os problemas ainda podem levar dias ou semanas de tempo de computação.
Jamesqf
A operação mais exigente em termos computacionais que espero do meu computador são tecnicamente gráficos, mas os cálculos de estrutura em movimento não são o que muitas pessoas (ou designers de GPU) pensam quando ouvem a palavra "gráficos".
Mark
5

Especificamente, as GPUs não são "núcleos" no sentido de "paralelismo de tarefas". Na maioria das vezes, é na forma de "paralelismo de dados". SIMD é "instrução única de múltiplos dados". O que isso significa é que você não faria isso:

for parallel i in range(0,1024): c[i] = a[i] * b[i]

Isso significa que você tem 1024 indicadores de instruções, todos executando tarefas separadas, progredindo a taxas diferentes. O SIMD ou "computação vetorial" executará instruções em matrizes inteiras de uma só vez, mais ou menos assim:

c = a * b

Os "loops" estão nas instruções "*" e "=", e não fora das instruções. O acima faria isso para todos os 1024 elementos ao mesmo tempo, no mesmo ponteiro de instrução para todos eles. É como ter três registros enormes para a, bec. O código SIMD é extremamente restrito e só funciona bem para problemas que não são excessivamente "ramificados".

Em casos realistas, esses valores SIMD não são tão grandes quanto 1024 itens. Imagine uma variável que é uma gangue de int32 unidas. Você pode pensar na multiplicação e atribuir como uma instrução real da máquina.

int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;

GPUs reais são mais complicadas que o SIMD, mas essa é a essência delas. É por isso que você não pode simplesmente lançar um algoritmo aleatório da CPU em uma GPU e esperar uma aceleração. Quanto mais instruções ramificando o algoritmo, menos apropriado é para uma GPU.

Roubar
fonte
5

As outras respostas aqui são muito boas. Vou jogar meus 2 centavos também.

Uma razão pela qual as CPUs se tornaram tão difundidas é que são flexíveis. Você pode reprogramar para uma variedade infinita de tarefas. Atualmente, é mais barato e mais rápido para as empresas que produzem produtos colocarem uma pequena CPU ou microcontrolador em algo e programam sua funcionalidade do que desenvolver circuitos personalizados para realizar a mesma tarefa.

Usando o mesmo dispositivo que outros, você pode tirar proveito das soluções conhecidas para problemas usando o mesmo dispositivo (ou similar). E à medida que a plataforma amadurece, suas soluções evoluem e se tornam muito maduras e otimizadas. As pessoas que codificam nesses dispositivos também adquirem experiência e se tornam muito boas em seu ofício.

Se você criar um novo tipo de dispositivo a partir do zero, uma alternativa a uma GPU, levaria anos para que até os primeiros adotantes se tornassem bons em saber como usá-lo. Se você anexar um ASIC à sua CPU, como otimizar a computação de descarregamento nesse dispositivo?

A comunidade de arquitetura de computadores está em choque com essa idéia há vários anos (obviamente já era popular antes, mas recentemente viu um renascimento). Esses 'aceleradores' (seus termos) têm graus variados de reprogramação. O problema é: com que precisão você define o escopo do problema que seu acelerador pode resolver? Até conversei com algumas pessoas que estavam trabalhando na criação de um acelerador usando circuitos analógicos com amplificadores operacionais para calcular equações diferenciais. Ótima idéia, mas com escopo extremamente estreito.

Depois de ter um acelerador ativo, as forças econômicas decidirão seu destino. A inércia do mercado é uma força incrível. Mesmo que algo seja uma ótima idéia, é economicamente viável refatorar suas soluções de trabalho para usar esse novo dispositivo? Talvez talvez não.

As GPUs são realmente horríveis para certos tipos de problemas, então muitas pessoas / empresas estão trabalhando em outros tipos de dispositivos. Mas as GPUs já estão tão entrincheiradas, seus dispositivos se tornarão economicamente viáveis? Eu acho que vamos ver.

Edit: Expandindo um pouco a minha resposta, agora que estou fora do ônibus.

Um estudo de caso preventivo é o projeto Intel Larrabee. Começou como um dispositivo de processamento paralelo que podia gerar gráficos em software; não possuía hardware gráfico especializado. Conversei com alguém que trabalhou no projeto, e um dos principais motivos pelos quais eles disseram que ele falhou e foi cancelado (além de horríveis políticas internas) foi que eles simplesmente não conseguiram que o compilador produzisse um bom código para ele. É claro que produziu código funcional, mas se todo o objetivo do seu produto é o desempenho máximo, é melhor ter um compilador que produza um código ideal. Isso remete ao meu comentário anterior sobre a falta de conhecimento profundo em hardware e software, pois o seu novo dispositivo é um grande problema.

Alguns elementos do design do Larrabee chegaram ao Xeon Phi / Intel MIC. Este produto chegou ao mercado. Ele foi totalmente focado em paralelizar cálculos científicos e outros tipos de HPC. Parece que é um fracasso comercial agora. Outra pessoa com quem conversei na Intel sugeriu que eles simplesmente não eram competitivos em preço / desempenho com as GPUs.

As pessoas tentaram integrar a síntese lógica de FPGAs aos compiladores, para que você possa gerar automaticamente código para seus aceleradores de FPGA. Eles não funcionam tão bem.

Um lugar que parece ser um solo realmente fértil para aceleradores ou outras alternativas às GPUs é a nuvem. A economia de escala que existe nessas grandes empresas como Google, Amazon e Microsoft faz o investimento em esquemas de computação alternativos valer a pena. Alguém já mencionou as unidades de processamento tensorial do Google. A Microsoft possui FPGAs e outras coisas em toda a infraestrutura do Bing e do Azure. A mesma história com a Amazon. É absolutamente sensato que a escala possa compensar seu investimento em tempo, dinheiro e lágrimas de engenharia.

Em resumo, a especialização está em desacordo com muitas outras coisas (economia, maturidade da plataforma, experiência em engenharia, etc.). A especialização pode melhorar significativamente seu desempenho, mas restringe o escopo ao qual seu dispositivo é aplicável. Minha resposta se concentrou em muitos aspectos negativos, mas a especialização também traz muitos benefícios. Absolutamente deve ser perseguido e investigado, e, como mencionei, muitos grupos o estão perseguindo de maneira bastante agressiva.

Desculpe, edite novamente: acho que sua premissa inicial está errada. Acredito que foi menos um caso de procurar fontes extras de poder computacional e mais um caso de pessoas reconhecendo uma oportunidade. A programação gráfica é muito pesada em álgebra linear, e a GPU foi projetada para executar com eficiência operações comuns como multiplicação de matrizes, operações vetoriais, etc. Operações que também são muito comuns à computação científica.

O interesse pelas GPUs começou assim que as pessoas reconheceram que as promessas feitas pelo projeto Intel / HP EPIC eram amplamente exageradas (finais dos anos 90 e início dos anos 2000). Não havia solução geral para a paralelização do compilador. Então, ao invés de dizer "onde encontramos mais poder de processamento, oh poderíamos tentar a GPU", acho que era mais "temos algo que é bom em cálculos paralelos, podemos tornar isso geralmente mais programável". Muitas pessoas envolvidas estavam na comunidade científica de computação, que já possuíam código Fortran paralelo que podiam executar em máquinas Cray ou Tera (o Tera MTA tinha 128 threads de hardware). Talvez tenha havido movimento de ambas as direções, mas só ouvi menções das origens do GPGPU nessa direção.

NerdPirate
fonte
Por "aceleradores", você está se referindo a hardware personalizado ou super clusters de nós de computação de baixa potência? Você pode elaborar fornecendo referência a algum exemplo de hardware do acelerador.
manav mn
Desculpe, pensei ter deixado isso claro a partir do contexto. Acelerador é apenas um termo genérico para coprocessador ou placa de transferência. O ponto flutuante estava originalmente em um coprocessador e não na CPU principal, e seria considerado um acelerador. GPUs, DSPs, Xeon Phi, FPGAs quando estão em uma placa PCIe ou algo semelhante, a coisa da equação diferencial analógica que mencionei, existem dispositivos que auxiliam na virtualização, há pesquisas atuais em aceleradores de redes neurais. Esses são todos exemplos de aceleradores.
NerdPirate 6/06
4

insira a descrição da imagem aqui

Um ASIC (silicone personalizado) é muito rápido, mas é muito caro para projetar e fabricar. O ASIC costumava ser específico para um propósito, e a CPU era uma abordagem que permitia que os computadores fossem "programados" para que tarefas de computação pudessem ser executadas por software. Os primeiros CPUs deram às pessoas a capacidade de tirar proveito do poder do ASIC sem o alto custo programando o chip em campo. Essa abordagem se tornou tão bem-sucedida que deu origem ao computador (muito) rápido que você está usando no momento.

Então, por que GPUs?

Em meados dos anos 90, o 3DFX percebeu que as tarefas de renderização em 3D eram tão específicas que um ASIC personalizado apresentava MUITO melhor desempenho que uma CPU. Eles criaram um coprocessador de computador que descarregava tarefas de renderização 3D da CPU para esse coprocessador, que eles chamavam de "GPU". A concorrência e a demanda do mercado levaram a inovação nesse espaço a um ponto em que as GPUs estavam realizando cálculos MUITO mais rápido que as CPUs, então surgiu a pergunta: "Por que não posso usar a GPU para processar meus números em vez da CPU?" Os fabricantes de GPU viram uma demanda e uma maneira de ganhar mais dinheiro, então começaram a alterar suas plataformas para permitir que os desenvolvedores usassem seu hardware. Mas o hardware do hardware era tão específico do propósito que havia, e ainda existem, limitações no que você pode pedir à GPU. Não vou entrar em detalhes sobre o porquê aqui.

Então, por que não havia mais silício para fins específicos? Por que apenas gráficos?

Duas razões: 1) Preço. As GPUs tinham um bom mercado e podiam justificá-lo, mas mesmo naquela época, era um risco enorme. Ninguém realmente sabia se o 3DFX poderia obter lucro (ao que parece, eles não podiam realmente e foram extintos). Mesmo agora, com o tamanho do mercado de GPU, existem realmente apenas três concorrentes. 2) as CPUs estavam realmente atendendo à necessidade de "silício personalizado" com extensões de instruções. Pense na MMX - essa foi realmente a tentativa da Intel de acelerar os gráficos na CPU, à medida que o 3DFX estava ganhando velocidade. Desde então, o conjunto de instruções x86 cresceu bastante para todas essas extensões personalizadas. Muitas dessas extensões faziam sentido na época (como a MMX), mas agora são em grande parte apenas um peso morto no processador. Você não pode removê-los, no entanto, porque isso quebra o software existente. Isto' s, na verdade, um dos pontos de venda do ARM - ARM é um conjunto de instruções simplificado. Não existem tantas extensões de instrução, mas isso torna o silício menor e mais barato de fabricar.

Parece-me que você poderia ganhar muito dinheiro se pudesse reduzir o custo do silicone personalizado. Ninguém está trabalhando nisso?

Existe uma tecnologia chamada FPGA - array de portas programável em campo, que existe desde os primeiros dias da computação. É essencialmente um microchip que você pode projetar "em campo" usando software. É uma tecnologia muito interessante, mas toda a estrutura necessária para tornar o chip programável consome MUITO silício e faz com que os chips funcionem em velocidades de clock muito mais baixas. Os FPGAs podem ser mais rápidos que os de CPU, se você tiver silício suficiente no chip E efetivamente paralelizar a tarefa. Mas eles são limitados em quanta lógica você pode colocar neles. Todos, exceto os FPGAs mais caros, eram mais lentos que os GPUs para a mineração de bitcoin, mas seus colegas do ASIC efetivamente encerraram a lucratividade da mineração de GPUs. Outras criptomoedas usaram algoritmos específicos que não podem ser paralelizados, portanto, FPGA e ASIC '

O principal limitador dos FPGAs é o tamanho do silício - quanta lógica você pode ajustar no chip? O segundo é a velocidade do relógio, porque é difícil otimizar itens como pontos quentes, vazamentos e conversas cruzadas em um FPGA. Os métodos de fabricação mais recentes minimizaram esses problemas, e a Intel se uniu à Altera para fornecer um FPGA que pode ser usado pelos engenheiros para aproveitar os benefícios do "silício personalizado" como co-processador em um servidor. Então está chegando, em certo sentido.

Os FPGAs serão substituídos por CPU e GPU?

Provavelmente não tão cedo. As mais recentes CPUs e GPUs são MASSIVAS e o silício é altamente ajustado para desempenho térmico e elétrico. Você não pode otimizar FPGAs da mesma maneira que um ASIC personalizado. Exceto por alguma tecnologia inovadora, a CPU provavelmente continuará sendo o núcleo do seu computador com coprocessadores FPGA e GPU.

Robear
fonte
11
Muitas dessas extensões faziam sentido na época (como a MMX), mas agora são em grande parte apenas um peso morto no processador. A renderização em 3D está longe de ser o único caso de uso do SIMD. A maior parte do "peso" do MMX são as unidades de execução, e elas podem ser compartilhadas com vetores mais amplos, como SSE2, AVX2 e AVX512. Eles são muito usados ​​para codificação de vídeo de alta qualidade em CPUs e muitas outras tarefas, incluindo computação de alto desempenho. Mas também implementações de bibliotecas de memchr, strlen e muitas outras coisas. por exemplo, filtrando uma matriz mais do que um elemento de cada vez
Pedro Cordes
3

De fato, existem placas especializadas para computação de alta velocidade, por exemplo, a Xilinx possui uma lista de 178 placas PCI-e usando seus FPGAs, e cerca de um terço dessas placas são "trituradoras de números" com um ou vários chips FPGA poderosos e muitos chips on-line. memória DDR da placa. Também existem placas DSP de alto desempenho ( exemplo ) destinadas a tarefas de computação de alto desempenho.

Eu acho que a popularidade das placas GPU decorre do seu objetivo em um grupo maior de clientes. Você não precisa investir em hardware especial para jogar com a Nvidia CUDA; assim, quando tiver uma tarefa que exija hardware especial, as GPUs da Nvidia terão uma vantagem competitiva em que você já sabe como programá-las.

Dmitry Grigoryev
fonte
2

Eu acho que a resposta para sua pergunta depende de como definir a computação de alto desempenho.

Em geral, o cálculo de alto desempenho está relacionado ao tempo de cálculo. Nesse caso, eu gosto de compartilhar o link do cluster de computação de alto desempenho .

O link é especificado o motivo do uso da GPU; O uso de placas gráficas (ou melhor, de suas GPUs) para fazer cálculos para computação em grade é muito mais econômico do que o uso de CPUs, apesar de ser menos preciso.

Cloud Cho
fonte
2
GPGPUs de última geração têm boa taxa de transferência para doubleprecisão de 64 bits , não apenas precisão de 32 bits float. (Algumas GPUs regulares economizam no HW para double). Todos os principais fornecedores suportam a matemática IEEE FP (acho que mesmo com denormals). Portanto, não há perda de precisão, a menos que você deseje trocar precisão por desempenho, por exemplo, com FP de meia precisão de 16 bits, que possui uma taxa de transferência ainda melhor em alguns hardwares (e, claro, metade da largura de banda da memória). O código de alto desempenho nas CPUs também costuma usar 32 bits float, para obter o dobro de elementos por vetor SIMD e metade da largura de banda da memória.
Peter Cordes
11
@PeterCordes Eu vi alguns trabalhos em computação aproximada que chegam ao ponto flutuante de oito bits, embora eu não ache que muitas GPUs suportem isso em hardware.
JAB