Qual é a diferença entre CPU e uma GPU para computação paralela?
CPU é especializada em computação em pipelines. Ela tem muitas instruções que são geralmente padronizadas e suas interfaces são destinadas como hardware e software para ter acesso e controle sobre todos os dispositivos de um PC.
Esta é a arquitetura de um núcleo i7 (fonte):
Uma CPU pode fazer computação paralela usando seus pipelines de instruções, e também núcleos. Cada núcleo é forte, e considerando a alta frequência o seu poder de processamento é significativo. Portanto, um núcleo da CPU pode executar um grande conjunto de instruções, mas não muitos de cada vez, sendo esse limite dado pelos pipelines de hardware implementados para um núcleo e a contagem do núcleo.
Se você comparar isso com uma GPU, ela terá dezenas de núcleos, núcleos que são limitados no poder de processamento, com um conjunto limitado de instruções, mas sendo muitos, todos executando 1 instrução de cada vez (ou mais, se eles tiverem pipelines), dependendo dos cálculos que precisam fazer, a arquitetura da GPU é adequada para terminar o trabalho específico muito mais rápido.
Como a arquitetura da GPU AMD RX-580 se parece (fonte):
Você pode se perguntar, se sim, por que a CPU não usa a mesma estratégia? Bem, primeiro, a CPU executa muitas vezes as instruções, mas para a CPU não é muito conhecido qual será a próxima instrução, até que ela receba algo da RAM, ou leia a entrada do Keyboard ou Mouse. Baseado nisso, uma arquitetura de GPU usada como CPU nunca funcionará corretamente, porque a carga de trabalho não é conhecida de antemão, para ser alocada corretamente entre os núcleos. No caso da GPU, a carga de trabalho é dividida em vários quadrados, e principalmente cada núcleo da GPU está cuidando da renderização de seu pedaço de código.
Outra razão pela qual GPU e CPU são diferentes é a maneira como são endereçadas. Sabemos que uma CPU usa os conjuntos de instruções x86, x64, MMX, AVX, etc. Estas instruções têm de ser compatíveis a nível de hardware, directamente endereçáveis pelo Sistema Operativo, código do programa, porque uma nova CPU tem de ser sempre compatível com versões anteriores. No caso da GPU, ao invés disso, os Jogos são interfaceados com os drivers da GPU através de uma API, como DirectX, OpenGL, ou Vulkan. E essas APIs estão endereçando as placas de vídeo através dos drivers. Os drivers estão constantemente mudando e melhorando. Isso significa que também as instruções endereçáveis da GPU podem sofrer modificações, dependendo das necessidades. E as instruções de hardware de uma GPU nVidia e de uma GPU AMD não são compatíveis, cada empresa implementando sua própria versão. O que torna as placas de vídeo compatíveis com os jogos são estes dois: os drivers e a API usada.
Então, no caso da GPU, se você quiser fazer computação paralela, você precisa ter acesso ao nível de hardware da GPU, e esse acesso precisa ser fornecido pelo fabricante da GPU através dos drivers.
No caso da CPU, você precisará apenas de um código para ser compilado com o código x86 compatível (ou x64, ou MMX, etc.).
Artigos semelhantes
- Quais são as diferenças entre a computação móvel, a computação ubíqua e a computação universal?
- Qual é a diferença entre uma CPU de console e uma CPU de PC?
- Qual é a diferença entre a GPU para jogos e a GPU para programação de gráficos profissionais?
- Qual é a diferença entre um socket 'CPU FAN', um socket 'CPU OPT' e um socket 'SYS FAN' na placa-mãe?