Qual é a diferença entre os núcleos da cpu e da gpu em termos de computação?

Principalmente, a GPU processa e renderiza gráficos. Como tal, é particularmente adequado para lidar com tarefas repetitivas. Podemos pensar nisso como um grupo muito grande de pessoas burras / não tão inteligentes. Coloque-os ao longo de uma linha de produção e eles poderão executar a mesma ação de maneira consistente e muito bem. A GPU possui mais ALUs (unidades lógicas aritméticas) do que CPUs. As CPUs, por outro lado, funcionam como o 'cérebro' e são os executivos do sistema. Ele direciona os recursos do computador para realizar tarefas atribuídas a ele e para manter o sistema funcionando (por exemplo, a temperatura está ficando alta no caso, é hora de fazer com que os fãs girem mais rapidamente) Podemos considerá-los como Conselho de Administração de uma empresa , gerenciando a saída e delegando tarefas. No exemplo da nossa linha de produção, eles dizem aos rapazes que estão ao longo da linha de produção o que fazer. Como exemplo, a mineração de bitcoin é feita principalmente por GPUs, enquanto a CPU apenas diz à GPU que é hora de minerar alguns bitcoins.

Há muitas respostas incorretas ou não muito corretas aqui.

Atualmente, as GPUs executam programas bastante gerais. Desde a introdução dos “shaders de computação”, eles também não são usados ​​para gráficos. E, apesar do entusiasmo de marketing sobre como contar os "núcleos de GPU", eles obviamente existem.

A principal diferença (que continua tremendo) é que as CPUs foram projetadas originalmente para executar um único fluxo de execução de instruções. Atualmente, mesmo um único núcleo de CPU normalmente executa muitos fluxos de execução intercalados ao mesmo tempo e a maioria das CPUs vem com vários núcleos.

As GPUs foram originalmente projetadas para executar um grande número de fluxos de processamento de uma só vez - primeiro dezenas, depois centenas, agora às vezes milhares. Originalmente, os fluxos de processamento eram de função fixa, mas agora são programas com ramificação, acesso aleatório à memória e outros recursos de uso geral. E eles não são usados ​​apenas para gráficos: “shaders de computação” são usados ​​para uma ampla variedade de processamento.

A principal diferença é que as CPUs são boas principalmente para algoritmos dependentes de dados que possuem paralelismo, mas não têm grandes quantidades, enquanto as GPUs são boas principalmente para algoritmos que possuem uma enorme quantidade de paralelismo inerente e que minimizam a quantidade de fluxo de controle dependente de dados. Obter a melhor largura de banda é de importância secundária para minimizar a latência.

Como efeito colateral dessas diferenças, a memória das CPUs geralmente é projetada para minimizar a latência de leitura, ou seja, o atraso de descobrir o que acessar e obter os dados. A memória para GPUs, por outro lado, geralmente é projetada para obter a maior largura de banda possível da memória. Minimizar a latência é muito de importância secundária para isso. Isso ocorre porque as GPUs são projetadas para funcionar bem quando muita latência pode ser ocultada, de modo que eles suportem algoritmos altamente paralelos que permitem enfileirar acessos à memória muito antes de quando os dados são necessários.

Existem muitas outras diferenças, mas essas são as mais essenciais. Estou envolvido no projeto de hardware de GPU há cerca de 30 anos. Muita coisa mudou naquele tempo e as antigas distinções claras estão cada vez mais embaçadas. Mas, fundamentalmente, eles vêm de lugares diferentes e são melhores para diferentes tipos de coisas.

Deixe-me expandir um pouco, porque as diferenças nos núcleos são apenas uma característica da diferença geral.

As GPUs são as sucessoras de coisas que costumávamos chamar de "coprocessadores de ponto flutuante" e (mais diretamente) "processadores vetoriais" (usados ​​em aplicativos intensivos em gráficos anteriores).

A ideia é que uma "CPU" seja uma

propósito geral

dispositivo, adequado para executar

qualquer

programa que alguém possa querer executar nele. Pode não ser otimizado para executar um programa específico com muita eficiência, mas também não executará esses programas.

lentamente

.

Coprocessadores, geralmente, são

projetado para uma finalidade específica

e executará certos tipos de instruções com muito mais eficiência do que uma CPU de uso geral, mas outros tipos de programas executariam muito mais

lentamente

do que em uma CPU GP.

E realmente vai além do conjunto de instruções; considere os tipos de coisas que se faz frequentemente em uma GPU, como aplicar uma transformação específica a uma "tela cheia" de valores de pixel. Isso é realizado executando o mesmo conjunto de instruções em uma grande quantidade de dados. Isso é muito diferente da execução de um programa de variedades de jardins (por exemplo, Microsoft Word), em que você normalmente faz muitas

diferente

coisas para um

relativamente pequeno

quantidade de dados a qualquer momento.

Esse é exatamente o tipo de coisa em que os "processadores vetoriais" foram inventados naquela época e geralmente existiam como uma placa de expansão para um computador (PC ou estação de trabalho Unix, geralmente). E, como as GPUs de hoje, elas foram usadas para processamento de gráficos e cálculos científicos, nas quais você frequentemente desejava fazer a mesma manipulação em um grande conjunto de dados que representava uma matriz.

Resumindo: uma GPU possui uma arquitetura otimizada para fazer muito bem um conjunto limitado de coisas. Uma CPU possui uma arquitetura mais geral para executar um conjunto muito mais amplo de coisas. No nível principal, essas diferenças geralmente são refletidas nos tipos de instruções fornecidas e quais são otimizadas no hardware.

O poder computacional do AFA é concerrado e a CPU ganha as mãos. Mas se as GPUs fossem excelentes em computação, então não haveria GPU, posso ter mais um núcleo de CPU. Núcleos de CPU podem executar cálculos mais rápidos que GPU. Uma GPU também pode executar operações matemáticas, embora seja mais lenta que a de uma CPU. Quando se trata de executar tarefas paralelas e similares, que não exigem muita computação para um núcleo, ele é atribuído a uma GPU. As GPUs têm núcleos múltiplos, mas cada núcleo é muito mais lento em computação do que os núcleos da CPU. Por tarefa paralela, você pode imaginar desenhar uma imagem na tela. Se uma CPU desenha isso, você precisará de um núcleo de CPU muito poderoso para que, ao desenhar pixels individuais, não ocorram atrasos, caso contrário, esse trabalho será atribuído à GPU, que desenha paralelamente em cada pixel e, portanto, o usuário encontra um bom desempenho. exibição. As GPUs são mais utilizadas quando jogamos jogos de computador com gráficos intensivos.

Um núcleo de CPU, é um computador completo, conectado a um barramento, que é compartilhado entre cada núcleo. Cada núcleo recebe uma fatia do barramento, quando necessário. Cada núcleo da CPU possui seus próprios registros e executa o código independentemente de qualquer outro núcleo, tanto quanto fisicamente possível. Cada núcleo pode tocar sua própria "melodia".

Um núcleo de GPU pode ter definições diferentes; na sua definição mais leve, é um pipeline matemático executado em paralelo com muitos outros pipeline matemático. É uma banda enorme executando tudo em paralelo, na etapa de bloqueio. Cada núcleo executa exatamente o mesmo código que qualquer outro núcleo em seu cluster. Cada núcleo pode ter diferentes valores de entrada e valores estáticos (atribuídos por "posição" ou índice). O acesso ao barramento é de natureza mais linear. Quando um núcleo busca no ônibus, todos eles fazem. Quando uma computação é concluída e armazenada, todos os "núcleos" salvam os dados em um fluxo (conceitualmente ao mesmo tempo).

A maior diferença é que os núcleos da CPU existem e os núcleos da GPU não.

O núcleo da CPU é a menor unidade de computação que pode ser implementada independentemente. Ou seja, o que você chama de núcleo da CPU pode ser transformado em um sistema de núcleo único. Você pode ter um único chip Intel de quarta geração Intel. Você não pode ter um chip AMD Bulldozer de núcleo único, porém eles só vêm em pares. Sendo essa a exceção. Um núcleo tem sua própria lógica de controle, cache e ALUs.

O núcleo da GPU é um jargão de marketing intercambiável. Algumas empresas, como a NVidia, abaixam tanto para chamar cada ALU de CUDA Core. Algumas outras empresas, como AMD e PowerVR, chamam um único cluster de computação de Core, o que é um pouco mais sensato. Portanto, um GTX 980 com 2048 ALUs organizadas em 16 SMM / SMX terá 2048 núcleos pelos livros da NVIDIA e 16 núcleos de acordo com a AMD.

Um único núcleo da CPU pode ser implementado. Um único cluster de computação da GPU também pode ser implementado. Mas uma única ULA será terrivelmente inútil. Um cluster de computação de GPU (SMM para Nvidia, GCN para AMD) possui ALUs, lógica de controle e cache como um núcleo de CPU.

A outra diferença são os recursos de computação. O menor núcleo da CPU possui 2 ALUs e o maior deles possui 20. O menor "núcleo" da GPU possui 8 ALUs e o maior possui 192. As GPUs são muito grandes e muito paralelas. E isso também reflete em seus blocos de construção fundamentais

Concluo dizendo que não escutam nada do que as empresas de tecnologia dizem. Núcleos, taxas de clock, TDPs, o que seja. Eles sempre dobram os fatos para vender e os números nem chegam perto de prever o desempenho do mundo real. Portanto, você precisa estudar a arquitetura avançada de computadores para julgar com precisão a eficácia de um projeto ou observar muitos parâmetros de referência.

Então, núcleos não importam. Nem outras especificações. Como as empresas de tecnologia projetam um mercado para as maçãs, decidem fazer um abacaxi, acabam fazendo laranjas e vendendo-as como Vada pav.