NVIDIA vs AMD: desempenho de GPGPU


105

Eu gostaria de ouvir de pessoas com experiência em codificação para ambos. Eu mesmo só tenho experiência com NVIDIA.

NVIDIA CUDA parece ser muito mais popular do que a concorrência. (Contando apenas as tags de pergunta neste fórum, 'cuda' supera 'opencl' 3: 1 e 'nvidia' supera 'ati' 15: 1, e não há nenhuma tag para 'ati-stream').

Por outro lado, de acordo com a Wikipedia, as placas ATI / AMD devem ter muito mais potencial, especialmente por dólar. A placa NVIDIA mais rápida do mercado até hoje, a GeForce 580 (US $ 500), está avaliada em 1,6 TFlops de precisão simples. A AMD Radeon 6970 pode ser adquirida por US $ 370 e está avaliada em 2,7 TFlops. O 580 tem 512 unidades de execução a 772 MHz. O 6970 tem 1536 unidades de execução a 880 MHz.

Quão realista é a vantagem do papel da AMD sobre a NVIDIA e é provável que seja realizada na maioria das tarefas de GPGPU? O que acontece com tarefas inteiras?


1
Pergunta interessante, mas não tenho certeza se é realmente relacionada à programação ?
Paul R

25
É essencialmente uma questão sobre duas linguagens de programação e aspectos práticos de suas implementações. Então eu diria que sim.
Eugene Smith

2
Eu me pergunto como as respostas a essa pergunta se tornaram relevantes à luz do C ++ AMP.
Dmitri Nesteruk

2
A certa altura, eu estava investigando por que a mineração de Bitcoins é tão lenta no hardware NVIDIA em comparação com a AMD. O tópico resultante, "AMD Radeon 3x mais rápido na mineração de bitcoin (desempenho de hashing SHA-256)", contém informações que você pode achar interessantes. sua pergunta. forums.nvidia.com/…
Roger Dahl

1
Parece-me que esta pergunta vai resultar em uma coleção de artigos de opinião, dependendo de quais áreas de aplicação os entrevistados estão familiarizados, qual hardware e software eles usam etc; ou uma resposta abrangente será muito ampla para caber no formato do SO. Votando para fechar.
njuffa,

Respostas:


79

Metaforicamente falando, a ati tem um bom motor em comparação com a nvidia. Mas a nvidia tem um carro melhor: D

Isso ocorre principalmente porque a nvidia investiu uma boa quantidade de seus recursos (em dinheiro e pessoas) para desenvolver importantes bibliotecas necessárias para a computação científica (BLAS, FFT) e, então, um bom trabalho novamente em sua promoção. Este pode ser o motivo pelo qual CUDA domina as tags aqui em comparação com ati (ou OpenCL)

Quanto à vantagem de ser percebida nas tarefas do GPGPU em geral, acabaria dependendo de outras questões (dependendo da aplicação) como largura de banda de transferência de memória, um bom compilador e provavelmente até o driver. tendo nvidia um compilador mais maduro, um driver mais estável no linux (linux porque, seu uso é muito difundido na computação científica), inclina a balança a favor do CUDA (pelo menos por enquanto).


EDITAR 12 de janeiro de 2013

Já se passaram dois anos desde que fiz esse post e ele ainda parece atrair visualizações às vezes. Decidi esclarecer algumas coisas

  • A AMD intensificou seu jogo. Eles agora têm bibliotecas BLAS e FFT. Numerosas bibliotecas de terceiros também estão surgindo em torno do OpenCL.
  • A Intel introduziu o Xeon Phi no mercado com suporte a OpenMP e OpenCL. Ele também tem a capacidade de usar o código x86 existente. conforme observado nos comentários, x86 limitado sem SSE por enquanto
  • NVIDIA e CUDA ainda têm a vantagem na variedade de bibliotecas disponíveis. No entanto, eles podem não estar se concentrando no OpenCL tanto quanto antes.

Resumindo, o OpenCL fechou a lacuna nos últimos dois anos. Existem novos jogadores em campo. Mas CUDA ainda está um pouco à frente do grupo.


4
Xeon Phi tem apenas capacidade limitada de execução de código x86. Sem MMX / SSE / SSE *.
osgx

@osgx Obrigado. Eu deveria ter mencionado isso.
Pavan Yalamanchili

1
@osgx Mas tem um bom desempenho no DP FP
Csaba Toth

4
O Xeon Phi tem registros e instruções de 512 bits, o que é 4 vezes maior que o que o SSE suporta.
zr.

59

Não tenho nenhum sentimento forte sobre CUDA vs. OpenCL; presumivelmente, o OpenCL é o futuro de longo prazo, apenas por ser um padrão aberto.

Mas as placas atuais NVIDIA vs ATI para GPGPU (não desempenho gráfico, mas GPGPU), sobre as quais tenho uma opinião forte. E para levar a isso, vou apontar que na atual lista dos 500 maiores clusters , a NVIDIA lidera os sistemas AMD 4 a 1 e, em gpgpu.org , os resultados da pesquisa (artigos, links para recursos online, etc) para a NVIDIA superam os resultados para AMD 6: 1.

Grande parte dessa diferença está na quantidade de informações online disponíveis. Confira NVIDIA CUDA Zone versus GPGPU Developer Central da AMD . A quantidade de material disponível para desenvolvedores que estão iniciando não chega nem perto de ser comparada. No site da NVIDIA você encontrará toneladas de artigos - e código contribuído - de pessoas que provavelmente estão trabalhando em problemas como o seu. Você encontrará toneladas de aulas online, da NVIDIA e de outros lugares, e documentos muito úteis como o guia de melhores práticas para desenvolvedores, etc. A disponibilidade de ferramentas de desenvolvimento gratuitas - o profiler, o cuda-gdb, etc - inclina esmagadoramente o caminho da NVIDIA.

(Editor: as informações neste parágrafo não são mais precisas.) E algumas das diferenças também estão no hardware. As placas AMD têm especificações melhores em termos de flops de pico, mas para conseguir uma fração significativa disso, você não só precisa dividir o problema em muitos processadores de fluxo completamente independentes, como cada item de trabalho também precisa ser vetorizado. Dado que o código de GPGPUing é difícil o suficiente, essa complexidade arquitetônica extra é suficiente para fazer ou quebrar alguns projetos.

E o resultado de tudo isso é que a comunidade de usuários NVIDIA continua a crescer. Dos três ou quatro grupos que conheço pensando em construir clusters de GPU, nenhum deles está considerando seriamente as placas AMD. E isso significará ainda mais grupos escrevendo artigos, contribuindo com código, etc. do lado da NVIDIA.

Não sou um shill da NVIDIA; Gostaria que não fosse assim e que houvesse duas (ou mais!) Plataformas GPGPU igualmente atraentes. A competição é boa. Talvez a AMD intensifique seu jogo muito em breve - e os próximos produtos de fusão parecem muito atraentes. Mas, ao dar conselhos a alguém sobre quais cartões comprar hoje e onde investir seu tempo agora, não posso, em sã consciência, dizer que os dois ambientes de desenvolvimento são igualmente bons.

Editado para adicionar : Eu acho que o acima é um pouco elíptico em termos de resposta à pergunta original, então deixe-me torná-lo um pouco mais explícito. O desempenho que você pode obter de uma peça de hardware é, em um mundo ideal com tempo infinito disponível, dependente apenas do hardware subjacente e dos recursos da linguagem de programação; mas, na realidade, a quantidade de desempenho que você pode obter em uma quantidade fixa de tempo investido também depende fortemente de ferramentas de desenvolvimento, bases de código de comunidade existentes (por exemplo, bibliotecas disponíveis publicamente, etc). Todas essas considerações apontam fortemente para a NVIDIA.

(Editor: as informações neste parágrafo não são mais precisas.) Em termos de hardware, o requisito de vetorização em unidades SIMD nos cartões AMD também torna o desempenho do papel ainda mais difícil do que com o hardware NVIDIA.


2
Estou aprendendo OpenCL usando ATI Stream, agradeço a observação sobre vetorização :) Embora eu perceba que os benefícios da NVIDIA são ... bastante grandes, eu simplesmente apoio a AMD / ATI e a própria empresa e tenho tempo para gastar criando bibliotecas: D acho que o desempenho do OpenCL vai definitivamente aumentará nos próximos anos e eu gostaria que meu código estivesse pronto para isso também.
Garet Claborn

Seria interessante ver o que você acha do GCN e OpenCL 1.2 da AMD, agora (2013) que simds são uma coisa do passado. Alguma diferença líquida?
danno

3
@Jonathan já faz 3 anos que você escreveu este ótimo post. Eu gostaria de saber se, em sua opinião, a plataforma, a comunidade e o ecossistema da AMD fecharam a lacuna.
basilikode

Não tanto para placas de vídeo ou GPGPU, mas quanto aos próprios processadores, sempre fui um fã da Intel sobre a AMD, no entanto, recentemente a AMD está prestes a lançar o novo processador ZEN em que seus testes de marca de queima estão mostrando isso nas configurações padrão é comparável aos principais processadores i7 da Intel. Sua nova tecnologia deve melhorar quanto mais funcionar, pois reconhece padrões de instruções. Portanto, acho que a maior parte do tempo e do esforço deles foi gasta neste novo processador, em oposição à tecnologia de GPU. No entanto, assim que seus processadores Zen forem lançados, tenho certeza que a Intel terá algo melhor.
Francis Cugler

17

A principal diferença entre as arquiteturas da AMD e da NVIDIA é que a AMD é otimizada para problemas em que o comportamento do algoritmo pode ser determinado em tempo de compilação, enquanto a NVIDIA é otimizada para problemas em que o comportamento do algoritmo só pode ser determinado em tempo de execução.

A AMD tem uma arquitetura relativamente simples que permite gastar mais transistores em ALU's. Contanto que o problema possa ser totalmente definido em tempo de compilação e mapeado com sucesso para a arquitetura de uma forma um tanto estática ou linear, há uma boa chance de que a AMD será capaz de executar o algoritmo mais rápido do que a NVIDIA.

Por outro lado, o compilador da NVIDIA está fazendo menos análises em tempo de compilação. Em vez disso, a NVIDIA tem uma arquitetura mais avançada, onde gastam mais transistores em lógica que é capaz de lidar com o comportamento dinâmico do algoritmo que surge apenas em tempo de execução.

Acredito que o fato de a maioria dos supercomputadores que usam GPUs acompanharem a NVIDIA é que o tipo de problema no qual os cientistas estão interessados ​​em fazer cálculos, em geral mapeia melhor para a arquitetura da NVIDIA do que para a AMD.


2
Com o GCN (Graphics Core Next), a AMD se afastou do SIMD e VLIW para uma arquitetura mais semelhante à da NVIDIA (SIMT e programação de instrução mais flexível).
Aleksandr Dubinsky

1
@AleksandrDubinsky: E com o hardware do Compute Capability 3.0, a NVIDIA se aproximou da AMD removendo o agendamento dinâmico. Acho que suas arquiteturas irão convergir para algum lugar no meio.
Roger Dahl

1
Já ouvi isso, mas não consegui encontrar nenhuma informação concreta. Onde posso encontrar mais detalhes sobre isso?
Yakov Galka

7

Eu fiz alguma codificação iterativa em OpenCL. E os resultados de executá-lo na NVIDIA e ATI são praticamente os mesmos. Quase a mesma velocidade nas cartas de mesmo valor ($).

Em ambos os casos, as velocidades eram de aproximadamente 10x-30x em comparação com uma CPU.

Eu não testei o CUDA, mas duvido que pudesse resolver meus problemas de busca aleatória de memória magicamente. Hoje em dia, CUDA e OpenCL são mais ou menos iguais e vejo mais futuro no OpenCL do que no CUDA. O principal motivo é que a Intel está lançando drivers com OpenCL para seus processadores. Este será um grande avanço no futuro (executar 16, 32 ou 64 threads de OpenCL na CPU é REALMENTE rápido e muito fácil de portar para GPU).


7

Tendo passado algum tempo com OpenCL para placas GCN após alguns anos de CUDA para Fermi e Kepler, ainda prefiro CUDA como linguagem de programação e escolheria hardware AMD com CUDA se tivesse uma opção.

Principais diferenças de NVIDIA e AMD (OpenCL):

Para AMD:

  • Mesmo com Maxwell, a NVidia ainda tem latências de comando mais longas e algoritmos complexos provavelmente serão 10 mais rápidos no AMD (assumindo os mesmos Tflops teóricos) após otimizações fáceis para ambos. A diferença foi de até 60% para Kepler VS GCN. É mais difícil otimizar kernels complexos para NVidia neste sentido.

  • Cartões baratos.

  • OpenCL é um padrão aberto com outros fornecedores disponíveis.

Para Nvidia:

  • Possui a linha Tesla de hardware adequada para altas cargas de servidor confiáveis.

  • O novo Maxwell é muito mais eficiente em termos de energia.

  • O compilador e as ferramentas são muito mais avançados. A AMD ainda não conseguiu implementar o maxregcoutparâmetro, então você pode controlar facilmente a ocupação em vários hardwares e seu compilador tem muitas idéias aleatórias do que é um código ideal que muda a cada versão, então você pode precisar revisitar o código antigo a cada metade um ano porque de repente ficou 40% mais lento.

Neste ponto, se GPGPU for seu objetivo, CUDA é a única escolha, já que opencL com AMD não está pronto para o farm de servidores e é significativamente mais difícil escrever código eficiente para AMD devido ao fato de que o compilador sempre parece estar "em beta" .


Obrigado pela nova resposta. Você pode esclarecer quais unidades "provavelmente serão 10 mais rápidas"? Por cento?
Aleksandr Dubinsky

Opinião pessoal: Houve um tempo em que as placas ATI eram em certo sentido melhores do que a Nvidia, mas não tinham suporte para atualização de driver e com o tempo a AMD comprou a ATI completamente, onde a Nvidia ainda é a mesma empresa. Além disso, a Nvidia ainda tem melhor suporte de atualização de driver. Isso depende mais do usuário final das placas para desempenho com aplicativos. Não me interpretem mal, ambas as tecnologias são excelentes à sua maneira e ambas têm cartões baratos de gama baixa, bem como cartões de gama alta mais caros. Com o tempo, mudei da ATI para a Nvidia. Quanto ao desenvolvimento, a Nvidia tem um conjunto de recursos muito melhor e API ou biblioteca programável.
Francis Cugler

6

Eu sou novo no GPGPU, mas tenho alguma experiência em computação científica (PhD em Física). Estou montando uma equipe de pesquisa e quero passar a usar GPGPU para meus cálculos. Tive que escolher entre as plataformas disponíveis. Decidi pela Nvidia, por alguns motivos: enquanto a ATI pode ser mais rápida no papel, a Nvidia tem uma plataforma mais madura e mais documentação, então será possível chegar mais perto do desempenho de pico nesta plataforma.

A Nvidia também tem um programa de suporte à pesquisa acadêmica, pode-se solicitar suporte, acabei de receber um cartão TESLA 2075 que estou muito feliz com isso. Não sei se a ATI ou a Intel oferecem suporte à pesquisa dessa forma.

O que ouvi sobre o OpenCL é que ele está tentando ser tudo ao mesmo tempo, é verdade que seu código OpenCL será mais portátil, mas também é provável que não explore todos os recursos de nenhuma das plataformas. Prefiro aprender um pouco mais e escrever programas que utilizem melhor os recursos. Com o TESLA K10 que acabou de sair este ano, a Nvidia está na faixa de 4,5 TeraFlops, então não está claro se a Nvidia está atrás ... no entanto, os MICs Intel podem provar ser um verdadeiro competidor, especialmente se eles conseguirem mover a unidade GPGPU para a placa-mãe. Mas, por enquanto, escolhi a Nvidia.


Dê uma olhada na resposta de @AndrewCooke para uma opinião sobre a (falta de) suporte da NVidia.
Aleksandr Dubinsky de

5

Minha experiência na avaliação de desempenho de ponto flutuante OpenCL tende a favorecer as placas NVIDIA. Trabalhei com alguns benchmarks de ponto flutuante em placas NVIDIA que vão desde a 8600M GT até a GTX 460. As placas NVIDIA atingem de forma consistente cerca da metade do pico teórico de precisino único nesses benchmarks.
As placas ATI com as quais trabalhei raramente alcançam mais do que um terço do pico de precisão simples. Observe que minha experiência com a ATI é distorcida; Só consegui trabalhar com uma placa da série 5000. Minha experiência é principalmente com placas da série HD 4000, que nunca foram bem suportadas. O suporte para as placas da série HD 5000 é muito melhor.


1

Eu gostaria de acrescentar ao debate. Para nós, no negócio de software, podemos comprometer o desempenho bruto de precisão simples com a produtividade, mas mesmo isso eu não tenho que comprometer, já que, como já foi apontado, você não pode alcançar tanto desempenho no hardware da ATI usando OpenCL quanto você pode alcançar se você escrever em CUDA no hardware da NVIDIA.

E sim, com o anúncio da PGI do compilador x86 para CUDA, não haverá nenhuma boa razão para gastar mais tempo e recursos escrevendo em OpenCL :)

PS: Meu argumento pode ser tendencioso, pois fazemos quase todo o nosso trabalho de GPGPU em CUDA. Temos uma biblioteca de processamento de imagens / visão computacional CUVI (CUDA para visão e imagem) que acelera algumas funcionalidades centrais de IP / CV no CUDA.


0

Cuda certamente é mais popular do que o OpenCL até hoje, pois foi lançado 3 ou 4 anos antes do OpenCL. Desde que o OpenCL foi lançado, a Nvidia não tem contribuído muito para a linguagem, pois se concentra muito no CUDA. Eles nem mesmo lançaram a versão openCL 1.2 para nenhum driver.

No que diz respeito à computação heterogênea, bem como aos dispositivos portáteis, o OpenCl certamente ganhará mais popularidade no futuro próximo. A partir de agora, o maior contribuidor do OpenCL é a AMD, visível em seu site.


-2

em minha experiência:

  • se você deseja o melhor desempenho absoluto, precisa ver quem está na iteração de hardware mais recente e usar sua pilha (incluindo as versões beta / mais recentes).

  • se você quer o melhor desempenho pelo dinheiro, estará mirando em cartões de jogador em vez de cartões "profissionais" e a flexibilidade de direcionar diferentes plataformas favorece a opencl.

  • se você está começando, em particular, o cuda tende a ser mais polido e ter mais ferramentas e bibliotecas.

finalmente, minha opinião pessoal, após o terrível "suporte" da nvidia (obtivemos um tesla morto e não foi alterado por meses, enquanto um cliente estava esperando): a flexibilidade de abandonar o navio com o opencl vale o risco de um desempenho ligeiramente inferior quando a nvidia está à frente no ciclo de lançamento.


Experiência semelhante com "suporte" da nvidia: travamento libcuda.so(apenas com OpenCL, CUDA funciona) e nenhuma resposta deles.
eudoxos

1
Com nosso revendedor, não temos problemas em substituir o tesla morto, geralmente recebemos o novo hardware antes de enviar o com defeito, então acho que não é um problema da NVidia, mas do seu revendedor.
Gaetano Mendola

Achei que Tesla era super confiável. Que fud de marketing.
Aleksandr Dubinsky

OpenCL não é portátil para desempenho, portanto, não é possível embarcar cada vez que uma empresa lança um novo carro-chefe (sem manter duas ramificações de código otimizadas). Além disso, o suporte a OpenCL da NVIDIA está várias versões atrás e, suspeito, mal mantido.
Aleksandr Dubinsky
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.