Por que ainda estamos usando CPUs em vez de GPUs?

373

Parece-me que hoje em dia muitos cálculos são feitos na GPU. Obviamente, gráficos são feitos lá, mas o uso de 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 que a CPU?

ell
fonte
3
como sei quais respostas contêm informações corretas? Devo esperar até que outras pessoas votem de cima para baixo? Eu acho que fui muito apressado em aceitar uma resposta: O
ell
14
Existem algumas respostas recentes @ell agora, que não contêm "desinformação". Eles estão gradualmente subindo ao topo com votos devido ao eficiente mecanismo de mercado do maravilhosamente projetado StackExchange ;-) Eu sugiro esperar um pouco mais antes de aceitar uma resposta. Parece que você, com muita prudência, está fazendo exatamente isso. Essa é uma boa pergunta, a propósito. Pode parecer óbvio, mas não é de todo. Obrigado por perguntar!
Ellie Kesselman
124
Como perguntar "Se o Boeing 747 é mais rápido e mais econômico, por que ainda dirigimos carros"?
vartec
7
Não, porque não é RISC versus CISC. É um dos outros fundamentos da ciência da computação, um pouco disfarçado. É "Por que transferimos o trabalho do processador central para os processadores de E / S?" .
JdeBP
5
@artec: Eu acho que uma analogia um pouco melhor pode ser entre ônibus e táxis. Se houver quarenta pessoas que todos querem ir do mesmo lugar para o mesmo lugar, um ônibus será muito mais eficiente. Se houver quarenta pessoas cujas origens e destinos desejados estão amplamente espalhados, até um único táxi pode ser tão bom quanto um ônibus e, pelo custo do ônibus, um pode ter vários táxis.
Supercat

Respostas:

388

Resposta da TL; DR: As GPUs têm muito mais núcleos de processador que as CPUs, mas como cada núcleo de GPU é significativamente mais lento que um núcleo de CPU e não possui os recursos necessários para os sistemas operacionais modernos, eles não são adequados para executar a maior parte do processamento no dia a dia. Informática. Eles são mais adequados para operações de computação intensiva, como processamento de vídeo e simulações de física.


GPGPU ainda é um conceito relativamente novo. As GPUs foram usadas inicialmente para renderizar apenas gráficos; À medida que a tecnologia avançava, o grande número de núcleos nas GPUs em relação às CPUs era explorado pelo desenvolvimento de recursos computacionais para GPUs, para que eles pudessem processar muitos fluxos de dados paralelos simultaneamente, independentemente de quais sejam esses dados. Embora as GPUs possam ter centenas ou milhares de processadores de fluxo, cada uma delas é mais lenta que o núcleo da CPU e possui menos recursos (mesmo se o Turing estiver completo e puder ser programado para executar qualquer programa que a CPU possa executar). Os recursos ausentes das GPUs incluem interrupções e memória virtual, necessárias para implementar um sistema operacional moderno.

Em outras palavras, CPUs e GPUs têm arquiteturas significativamente diferentes que as tornam mais adequadas para tarefas diferentes. Uma GPU pode lidar com grandes quantidades de dados em muitos fluxos, executando operações relativamente simples neles, mas não é adequada para processamento pesado ou complexo em um ou poucos fluxos de dados. Uma CPU é muito mais rápida em uma base por núcleo (em termos de instruções por segundo) e pode executar operações complexas em um único ou poucos 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 que não podem ser paralelizadas, incluindo muitos aplicativos de consumo comuns, 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 ela funcionasse, e são necessárias técnicas significativamente diferentes para programar as GPUs. Essas diferentes técnicas incluem novas linguagens de programação, modificações nas 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 executar operações vetoriais e aritmética de ponto flutuante, com os últimos cartões capazes de manipular números de ponto flutuante de precisão dupla. Estruturas como CUDA e OpenCL permitem que programas sejam gravados 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 pode ser um substituto viável para um pequeno cluster de computação como nos supercomputadores pessoais NVIDIA Tesla . Os consumidores com GPUs modernas com experiência no Folding @ home podem usá-los para contribuir com os clientes da GPU , que podem executar simulações de dobra de proteínas em velocidades muito altas e contribuir com mais trabalho para o projeto (leia as Perguntas frequentes)primeiro, especialmente aqueles relacionados a GPUs). As GPUs também podem permitir uma melhor simulação física em jogos de vídeo usando o PhysX, acelerar a codificação e decodificação de vídeo e executar outras tarefas intensivas em computação. É nesse tipo de tarefa que as GPUs são mais adequadas para a execução.

A AMD é pioneira em um design de processador chamado Unidade de Processamento Acelerado (APU), que combina núcleos de CPU x86 convencionais com GPUs. Essa abordagem permite um desempenho gráfico muito superior às soluções gráficas integradas à placa-mãe (embora não correspondam às GPUs discretas mais caras) e permite um sistema compacto e de baixo custo com bom desempenho multimídia, sem a necessidade de uma GPU separada. Os processadores Intel mais recentes também oferecem gráficos integrados no chip, embora o desempenho competitivo da GPU integrada atualmente esteja limitado a alguns chips com o Intel Iris Pro Graphics. À medida que a tecnologia continuar avançando, veremos um grau crescente de convergência dessas partes que antes eram separadas. AMD prevêum futuro em que a CPU e a GPU sejam únicas, capazes de trabalhar juntas na mesma tarefa .

No entanto, muitas tarefas realizadas pelos sistemas operacionais e aplicativos de PC ainda são mais adequadas para as CPUs, e muito trabalho é necessário para acelerar um programa usando uma GPU. Como muitos softwares existentes usam a arquitetura x86 e como as GPUs exigem diferentes técnicas de programação e faltam vários recursos importantes necessários para os sistemas operacionais, é muito difícil uma transição geral da CPU para a GPU para a computação cotidiana.

bwDraco
fonte
39
Como esta resposta, acho que o principal motivo é que não temos boas linguagens de programação de fluxo principal para lidar com arquiteturas paralelas como esta. Temos lutado por décadas para avançar na programação multiencadeada, e as pessoas ainda estão chamando de "mal" de multiencadeamento. Apesar disso, CPUs e GPUs com vários núcleos são uma realidade, e teremos que criar novos paradigmas de programação para lidar com isso.
Soren
Vale ressaltar que a Intel vem trabalhando na arquitetura Larrabee (há muito tempo), que é essencialmente um chip com um grande número de núcleos x86.
Chris S
Ótima resposta para discutir os motivos de hardware e discutir APUs e como eles mudarão isso. No entanto, o @Soren mostra muito bem o lado do software. Na realidade, é a combinação dos problemas de hardware, do software e do fato de as CPUs funcionarem e, quando se sabe que algo funciona, é difícil convencer as pessoas a substituí-las.
Nich Del
3
"não temos boas linguagens de programação de fluxo principal para lidar com arquiteturas paralelas como esta." - Haskell, OCaml, Scheme, F #, Erlang e praticamente qualquer outro idioma de programação funcional lidam muito bem com multithreading. Todos os que eu mencionei são mainstream.
BlueRaja - Danny Pflughoeft
1
@BlueRaja - estamos conscientes destas línguas, a sua definição de fluxo principal deve ser diferente do que a minha :-)
Soren
252

O que torna a GPU muito mais rápida que a CPU?

A GPU não é mais rápida que a CPU. CPU e GPU são projetadas com dois objetivos diferentes, com diferentes trade-offs, para que eles tenham características de desempenho diferentes . Certas tarefas são mais rápidas em uma CPU, enquanto outras são computadas mais rapidamente em uma GPU. A CPU se destaca em fazer manipulações complexas em um pequeno conjunto de dados, a GPU se destaca em fazer manipulações simples em um grande conjunto de dados.

A GPU é uma CPU para fins especiais, projetada para que uma única instrução funcione em um grande bloco de dados (SIMD / Dados Múltiplos de Instrução Única), todos eles aplicando a mesma operação. Trabalhar em blocos de dados é certamente mais eficiente do que trabalhar com uma única célula por vez, porque há uma sobrecarga muito reduzida na decodificação das instruções, no entanto, trabalhar em grandes blocos significa que há mais unidades de trabalho paralelas, portanto, ele usa muito mais transistores implementar uma única instrução GPU (causando restrição de tamanho físico, consumindo mais energia e produzindo mais calor).

A CPU foi projetada para executar uma única instrução em um único dado o mais rápido possível. Como ele só precisa trabalhar com um único dado, o número de transistores necessários para implementar uma única instrução é muito menor, para que uma CPU possa ter um conjunto de instruções maior, uma ALU mais complexa, uma melhor previsão de ramificação, melhor virtualizada arquitetura e esquemas de cache / pipeline mais sofisticados. Seus ciclos de instruções também são mais rápidos.

A razão pela qual ainda estamos usando a CPU não é porque x86 é o rei da arquitetura da CPU e o Windows foi escrito para x86, a razão pela qual ainda estamos usando a CPU é porque o tipo de tarefas que um sistema operacional precisa executar, como tomar decisões, é executado com mais eficiência em uma arquitetura de CPU. Um sistema operacional precisa examinar centenas de tipos diferentes de dados e tomar várias decisões, que dependem uma da outra; esse tipo de trabalho não é paralelo com facilidade, pelo menos não em uma arquitetura SIMD.

No futuro, o que veremos é uma convergência entre a arquitetura da CPU e da GPU, à medida que a CPU adquire a capacidade de trabalhar sobre blocos de dados, por exemplo, SSE. Além disso, à medida que a tecnologia de fabricação melhora e os chips diminuem, a GPU pode se dar ao luxo de implementar instruções mais complexas.

Lie Ryan
fonte
23
Esta é provavelmente a melhor resposta aqui. É importante entender as diferenças fundamentais entre os dois paradigmas. Para as GPUs ultrapassarem as CPUs, considerando as cargas de trabalho atuais, significa essencialmente que uma GPU deve se transformar em uma CPU. E assim a pergunta é a resposta.
surfasb
2
+1 por esta ser a melhor resposta. Tanto esta como a resposta aceita estão corretas, mas esta explica muito mais claramente.
Estou surpreso que ninguém neste segmento tenha mencionado a sobrecarga de envio de dados para a GPU - a largura de banda limitada pelos barramentos PCI-Express faz algumas operações paralelas em uma GPU muito mais lentas do que foram realizadas na CPU. Pode-se observar um caso simples em que a variação do tamanho de uma FFT fez uma diferença significativa no desempenho da GPU vs. CPU devido à sobrecarga de envio de dados, configuração de um contexto, leitura de resultados: stackoverflow.com/a/8687732/303612 operações menores podem ser realizadas no-cache em CPUs, e a largura de banda de memória é muito superior à actual arquitectura PCI-e
Dr. Andrew Burnett-Thompson
1
@ Dr.AndrewBurnett-Thompson: isso é porque isso é irrelevante para a pergunta. Atualmente, a GPU é considerada uma unidade de processamento auxiliar, é por isso que a movimentação de dados de / para uma GPU é necessária e cara. Se tratarmos a GPU como a unidade de processamento de primeira classe, não haverá necessidade de reunir dados entre a memória principal e a memória da GPU.
Lie Ryan
1
Não é otimista, não tem sobrecarga de largura de banda zero. Se um processador com uma arquitetura de GPU executa o programa inteiro, não há nada que precise ser movido, a memória da GPU é a memória principal. Não há custos indiretos de transferência a serem discutidos em primeiro lugar porque não há transferências. A propósito, isso não é hipotético: as APUs da AMD usam HSA (arquitetura de sistema heterogêneo) com memória principal unificada que permite cópia zero entre a CPU e a GPU.
Lie Ryan
75

Falta GPU:

  1. Memória virtual (!!!)
  2. Meios de endereçar dispositivos que não sejam memória (por exemplo, teclados, impressoras, armazenamento secundário, etc.)
  3. Interrompe

Você precisa deles para implementar algo como um sistema operacional moderno.

Eles também são (relativamente) lentos com aritmética de precisão dupla (quando comparados ao desempenho aritmético de precisão única) * e são muito maiores (em termos de tamanho de silício). As arquiteturas mais antigas de GPU não suportam chamadas indiretas (por meio de ponteiros de função) necessárias para a maioria dos programas de uso geral e arquiteturas mais recentes que o fazem lentamente. Finalmente, (como outras respostas observaram), para tarefas que não podem ser paralelizadas, as GPUs perdem em comparação com as CPUs que recebem a mesma carga de trabalho.

EDIT : Observe que esta resposta foi escrita em 2011 - a tecnologia da GPU é uma área que muda constantemente. As coisas podem ser muito diferentes dependendo de quando você estiver lendo isso: P

* Algumas GPUs não são lentas com aritmética de precisão dupla, como as linhas Quadro ou Tesla da NVidia (geração Fermi ou mais recente) ou a linha FirePro da AMD (geração GCN ou mais recente). Mas estes não estão nas máquinas da maioria dos consumidores.

Billy ONeal
fonte
@ Cigarra: Você tem uma referência para isso? De qualquer forma, mesmo que isso seja verdade, mesmo o hardware recente não terá um bom desempenho nesse caso. (por exemplo, não teria muita vantagem perf sobre uma CPU - e uma desvantagem consumo de energia)
Billy ONeal
3
Sim, os dispositivos Fermi, como você disse (com CUDA 4.0 e sm_20), suportam saltos indiretos (e, portanto, métodos virtuais em C ++, herança etc.).
Angry Lettuce
544 GigaFLOPS de uma GPU de US $ 300 com 2 anos de idade é lento?
Ben Voigt
2
@ Ben: Você só obtém esse tipo de desempenho em aplicativos paralelos a dados. As operações sequenciais gerais são um jogo totalmente diferente. (Isso é somente com todos os 1.600 núcleos em que o chip correndo em paralelo, correndo essencialmente a mesma instrução e outra vez ... e mesmo isso é teórico em vez de perf real)
Billy ONeal
@ Billy: Mas isso é lentidão em uma classe específica de algoritmos, não lentidão na aritmética de precisão dupla (que é o que você afirmou). (E CPUs geralmente não realizam capacidades de referência quer)
Ben Voigt
37

Uma CPU é como um trabalhador que é super rápido. Uma GPU é como um grupo de trabalhadores de clones que são rápidos, mas que todos precisam fazer exatamente a mesma coisa em uníssono (com a exceção de que alguns clones podem ficar ociosos, se quiser)

Qual você preferiria ter como desenvolvedor, um cara super rápido ou 100 clones rápidos que na verdade não são tão rápidos, mas todos precisam executar as mesmas ações simultaneamente?

Para algumas ações, os clones são muito bons, por exemplo, varrem o chão - cada um pode varrer parte dele.

Para algumas ações, os clones fedem, por exemplo, escreva o relatório semanal - todos os clones, exceto um, ficam ociosos enquanto um clone escreve o relatório (caso contrário, você apenas recebe 100 cópias do mesmo relatório).

John Robertson
fonte
4
Eu poderia até ter ... os dois?
21411 Kevin Panko
22
@ Kevin: Sim, mas você precisa de um computador com tanto uma CPU e uma GPU! Se ao menos houvesse uma coisa dessas!
Joachim Sauer
3
Ótima analogia. Vai se lembrar disso.
Mayo
23

Como as GPUs são projetadas para fazer muitas coisas pequenas ao mesmo tempo, e as CPUs são projetadas para fazer uma coisa de cada vez. Se o seu processo puder ser maciçamente paralelo, como o hash, a GPU terá ordens de magnitude mais rápidas, caso contrário não será.

Sua CPU pode calcular um hash muito, muito mais rápido que sua GPU - mas, quanto tempo leva para sua CPU, sua GPU pode estar no meio de centenas de hashes. As GPUs são projetadas para fazer muitas coisas ao mesmo tempo, e as CPUs são projetadas para fazer uma coisa de cada vez, mas muito rapidamente.

O problema é que CPUs e GPUs são soluções muito diferentes para problemas muito diferentes, há uma pequena sobreposição, mas geralmente o que está em seu domínio permanece em seu domínio. Não podemos substituir a CPU por uma GPU porque a CPU está lá, fazendo seu trabalho muito melhor do que uma GPU jamais poderia, simplesmente porque uma GPU não foi projetada para fazer o trabalho e é uma CPU.

Uma observação secundária secundária, se fosse possível descartar a CPU e ter apenas uma GPU, você não acha que a renomearíamos? :)

Phoshi
fonte
Acho que a maioria das CPUs modernas é projetada para fazer 2, 4 ou 8 coisas ao mesmo tempo.
Danielcg
@ danielcg25: E as GPUs mais modernas são projetadas para executar 256, 512, 1024 coisas de uma só vez (a GTX 680 possui 1536 núcleos CUDA). Cada núcleo de CPU individual é uma entidade distinta conceitualmente, mas isso não é verdade para uma GPU.
Phoshi
@ danielcg25: Estou ciente, mas um comentário com um mal-entendido fundamental (embora intencional) da resposta pode ser prejudicial se alguém a estiver lendo sem já conhecer o tópico. "Ser burro", nesse sentido, não é realmente apreciado no SE, pois diminui a relação sinal: ruído.
Phoshi
Eu estava apenas fornecendo algumas informações. Atualmente, a maioria dos computadores atualmente é capaz de processar de 2 a 8 coisas ao mesmo tempo. Alguns processadores podem fazer ainda mais do que isso. Ainda não chega nem perto das GPUs, que fazem centenas de coisas ao mesmo tempo.
Danielcg
@ danielcg25: No entanto, é um tipo diferente de processamento, e é disso que se trata a questão. Cada núcleo da CPU é efetivamente separado, trabalhando com seus próprios blocos de dados e seus próprios processos. Cada núcleo da CPU executa uma tarefa diferente e separada entre si, e eles não aumentam linearmente - um octo-núcleo não é duas vezes mais útil que um quad-core, não é duas vezes mais que um dual-core. Os núcleos de GPU, por outro lado, executam a mesma tarefa em diferentes partes de dados e escalam linearmente. É óbvio que existem CPUs com vários núcleos, mas isso não é a mesma coisa .
Phoshi
14

Você está realmente perguntando por que não estamos usando GPU como arquiteturas na CPU?

GPU é apenas uma CPU especializada de uma placa gráfica. Emprestamos computação gráfica não GPU, porque a CPU de uso geral não está à altura da execução paralela e de ponto flutuante.

Na verdade, estamos usando arquiteturas de CPU diferentes (com mais GPU). Por exemplo, os processadores Niagara são bastante multitarefas. O SPARC T3 executará 512 threads simultâneos.

jkj
fonte
Por que um voto negativo?
Jkj
3
Eu acho que a última linha, como é simplesmente falsa. De fato, só consigo pensar em um sistema operacional mainstream somente para x86; e mesmo esse foi portado para processadores alfa e ARM, apenas não oferecidos comercialmente no momento.
Javier
Está bem. Removida a última seção que era minha opinião sobre o suporte ao sistema operacional convencional, dificultando a mudança para novas arquiteturas. Pode não estar no escopo da resposta.
jkj
11

Eu posso estar terrivelmente enganado aqui, e estou falando de pouca ou nenhuma autoridade sobre o assunto, mas aqui vai:

  • Acredito que cada unidade de execução de GPU ("núcleo") tem um espaço de endereço muito limitado em comparação com uma CPU.

  • As unidades de execução da GPU não conseguem lidar com ramificações de forma eficiente.

  • As unidades de execução de GPU não suportam interrupções de hardware da mesma forma que as CPUs.

Eu sempre pensei que a forma como as unidades de execução da GPU deveriam ser é algo como os "SPEs" do Playstation 3, eles querem receber um bloco de dados, executar várias operações seqüenciais nele e cuspir outro bloco de dados. dados, enxágüe, repita. Eles não têm tanta memória endereçável quanto o "CPE" principal, mas a idéia é dedicar cada "SPE" a uma tarefa seqüencial específica. A saída de uma unidade pode alimentar a entrada de outra unidade.

As unidades de execução não funcionam bem se estão tentando "analisar" os dados e tomar várias decisões com base no que são esses dados.

Esses "blocos de dados" podem fazer parte de um fluxo, como uma lista de vértices da tabela de estados de um jogo, dados MPEG de um disco etc.

Se algo não se encaixa nesse modelo de "streaming", você tem uma tarefa que não pode ser paralelizada com eficiência e a GPU não é necessariamente a melhor solução para isso. Um bom exemplo é o processamento de coisas baseadas em "evento externo", como teclado, joystick ou entrada de rede. Não há muitas coisas que não se encaixam nesse modelo, mas sempre haverá algumas.

LawrenceC
fonte
Bom ponto sobre a otimização de previsão de ramificação - eu nunca consideraria isso, mas você está certo.
Jimmy Breck-McKye
6

Isso não é nada sobre velocidade ou propósito do relógio. Ambos são igualmente capazes de concluir a maioria, senão todas as tarefas; no entanto, alguns são um pouco mais adequados para algumas tarefas do que outras.

Há um argumento muito antigo sobre se é melhor ter muitos núcleos burros ou um pequeno grupo de núcleos muito inteligentes. Isso remonta facilmente aos anos 80.

Dentro de uma CPU, existem muitos cálculos possíveis que podem ser feitos. Os núcleos mais inteligentes são capazes de realizar muitos cálculos diferentes ao mesmo tempo (como o multi-núcleo, mas não é complicado; consulte paralelismo no nível da instrução ). Um núcleo inteligente pode fazer vários cálculos ao mesmo tempo (somar, subtrair, multiplicar, dividir, operação de memória), mas apenas um de cada vez; por isso, eles são fisicamente maiores (e, portanto, muito mais caros) do que os núcleos mais escuros.

Um núcleo burro é muito menor e, portanto, mais pode ser adicionado a um único chip, mas não é capaz de fazer tantos cálculos simultâneos. Há um bom equilíbrio entre muitos núcleos mudos e alguns núcleos inteligentes.

As arquiteturas de vários núcleos funcionam bem com os gráficos, porque os cálculos podem ser facilmente divididos em centenas de núcleos, mas também depende da qualidade do código e se outro código depende do resultado de um cálculo.

Essa é uma pergunta muito mais complicada do que pode parecer. Para mais informações, leia este artigo sobre o design da CPU:

Microprocessadores modernos - Um guia de 90 minutos

http://www.lighterra.com/papers/modernmicroprocessors/

Silverfire
fonte
desculpe a gramática ruim e, em geral, o estilo de escrita sub-par usado acima, eu não tomei meu café. é um conceito bastante complicado e o link incluído é para onde você deve ir se quiser entender mais. não a minha explicação ruim
Silverfire
1
Corrigi-o para você e adicionei um link também.
BwDraco
5

Gostaria de abordar um ponto sintático: Os termos CPU e GPU são nomes funcionais, não nomes arquitetônicos.

Se um computador usasse uma GPU como seu processador principal, ele se tornaria uma "unidade central de processamento" (CPU), independentemente da arquitetura e do design.

Andrew Neely
fonte
4

É importante ter em mente que não há linha divisória mágica no espaço da arquitetura que torne um processador o "central" e o outro o "gráfico". (Bem, algumas GPUs podem estar aleijadas demais para serem totalmente gerais, mas não é sobre isso que estamos falando aqui.)

A distinção é uma de como eles são instalados no quadro e quais tarefas são dadas a eles. Obviamente, usamos processadores de uso geral (ou conjunto de processadores de uso geral) para o principal movedor de dados, e uma unidade especial, paralelizada e profundamente alinhada por tubos, para coisas (como gráficos) que possam tirar melhor proveito deles.

A maioria dos truques que foram usados ​​para fazer com que as GPUs realizassem suas tarefas muito rapidamente foram desenvolvidos por pessoas que tentavam criar CPUs mais rápidas e melhores. Acontece que o Word, Excel e Netscape e muitas outras coisas para as quais as pessoas usam seus computadores não apenas aproveitam ao máximo os recursos oferecidos pelos chips gráficos especializados, mas também correm mais devagar nessas arquiteturas porque ramificam muitas causas (muito caras e lenta) a linha de tubulação limpa.

dmckee
fonte
1
Acho que as despesas gerais do pipeline são um detalhe fundamental, pois faltam respostas mais altas.
Steve
2

O ponto principal de haver uma GPU era aliviar a CPU dos cálculos gráficos caros que estava sendo feito na época.
Combiná-los em um único processador novamente voltaria a onde tudo começou.

Petruza
fonte
Sim, um passo à frente, dois passos para trás.
Randolf Richardson 12/08
2

Por uma razão simples: a maioria dos aplicativos não é multiencadeada / vetorizada.

As placas gráficas dependem muito do multiencadeamento, pelo menos no conceito.

Compare um carro com um único motor, um carro com um motor menor por roda. Com o último carro, você precisa comandar todos os motores, algo que não foi levado em consideração no ponto de vista da programação do sistema.

Porém, com a fusão da AMD, ele mudará a forma como precisaremos usar o poder de processamento: vetorizado ou rápido para um thread.

jokoon
fonte
2

A razão pela qual ainda estamos usando CPUs é que ambas, CPUs e GPUs, têm suas vantagens exclusivas. Veja meu artigo a seguir, aceito no ACM Computing Surveys 2015, que fornece uma discussão conclusiva e abrangente sobre como passar do 'debate CPU vs GPU' para 'computação colaborativa CPU-GPU'.

Uma pesquisa sobre técnicas de computação heterogênea CPU-GPU

user984260
fonte
1

Se colocar simplesmente GPU pode ser comparado ao reboque no carro. Como geralmente o tronco é suficiente para a maioria das pessoas, exceto nos casos em que eles compram algo realmente grande. Então eles podem precisar de trailer. O mesmo acontece com a GPU, pois geralmente é suficiente ter uma CPU comum que realizará a maioria das tarefas. Mas se você precisar de alguns cálculos intensivos em vários threads, poderá precisar de GPU

Yuriy Zaletskyy
fonte
1

GPUS são bons processadores de fluxo. você pode pensar no processamento de fluxo como multiplicando uma longa matriz de números sequencialmente. O cpus também possui recursos de processamento de fluxo (chamados de extensões SIMD), mas você não pode implementar toda a lógica de programação como processamento de fluxo, e os compiladores têm a opção de criar um código de código que utiliza as instruções simd sempre que possível.

nem tudo é uma matriz de números. fotos e vídeos são, talvez também soem (existem codificadores opencl aqui e ali). para que o gpus possa processar, codificar e decodificar fotos, vídeos e qualquer coisa semelhante. Uma desvantagem é que você não pode descarregar tudo para o gpus nos jogos porque isso criaria gagueira, os gpus estão ocupados com gráficos e devem ser o gargalo do sistema ao jogar. a solução ideal seria utilizar totalmente todos os componentes em um PC. então, por exemplo, o mecanismo physx da nvidia, por padrão, faz cálculos na CPU quando a GPU é totalmente utilizada.

Uğur Gümüşhan
fonte