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?
Respostas:
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
Resumindo, o OpenCL fechou a lacuna nos últimos dois anos. Existem novos jogadores em campo. Mas CUDA ainda está um pouco à frente do grupo.
fonte
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.
fonte
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.
fonte
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).
fonte
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
maxregcout
parâ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" .
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
libcuda.so
(apenas com OpenCL, CUDA funciona) e nenhuma resposta deles.