De acordo com as informações do site, uma breve compilação das diferenças entre CUDA e OpenCL. Por favor, aponte qualquer erro.
Digressão: Um teste de simulação no Sandia National Laboratory, nos Estados Unidos, provou que, devido às limitações do mecanismo de armazenamento e da largura de banda da memória, processadores de 16, 32 ou até 64 núcleos não só não conseguem melhorar o desempenho dos supercomputadores, como podem até levar a uma diminuição significativa da eficiência.
O que é OpenCL?
É um padrão aberto e livre para programação paralela para o propósito geral de sistemas heterogêneos, iniciado pela Apple e produzido conjuntamente por muitos fabricantes renomados da indústria, além de ser um ambiente de programação unificado. É conveniente para desenvolvedores de software escreverem código eficiente e leve para servidores de computação de alto desempenho, sistemas de computação desktop e dispositivos portáteis, sendo amplamente utilizado em processadores multi-core (CPUs), unidades de processamento gráfico (GPUs), arquiteturas do tipo célula e outros processadores paralelos, como processadores digitais de sinal (DSPs), além de ter amplas perspectivas de desenvolvimento em diversos campos como jogos, entretenimento, pesquisa científica e cuidados médicos.
O que é CUDA?
CUDA é uma arquitetura baseada em computação paralela em GPUs Nvidia. O CUDA inclui principalmente dois aspectos: um é a arquitetura do conjunto de instruções ISA; o segundo motor de computação por hardware; Na verdade, é hardware e conjunto de instruções. Em outras palavras, podemos pensar no CUDA como uma arquitetura semelhante ao X86 ou célula, mas baseada em GPUs, não em CPUs tradicionais.
O que exatamente é OpenCL?
O OpenCL é, na verdade, uma API totalmente nova para programação paralela de sistemas heterogêneos, e o OpenCL pode usar GPUs para realizar algum trabalho de computação paralela. OpenGL é para grafos, enquanto OpenCL é para computação paralela. No processo de desenvolvimento do OpenCL, as plataformas técnicas são todas GPUs NVIDIA e, de fato, o OpenCL é desenvolvido com base em plataformas de GPU NVIDIA. Além disso, a primeira demonstração do OpenCL também rodava em GPUs NVIDIA. Essencialmente, o OpenCL é uma tecnologia equivalente ao DirectX na plataforma Windows. Ou melhor, é uma interface API que conecta hardware e software. Nesse aspecto, é semelhante ao OpenGL, mas o OpenCL é muito mais extenso que o OpenGL, e não é usado apenas para gráficos 3D. Se você descrever em uma frase, o papel do OpenCL é liberar o potencial de hardware chamando os recursos computacionais do processador e da GPU, para que o programa rode mais rápido e melhor.
O que realmente é CUDA?
A arquitetura CUDA é nativa, especialmente construída para interfaces de computação, e essa arquitetura de hardware, incluindo conjuntos de instruções, é um conjunto completo de arquiteturas projetadas para esse tipo de computação paralela e computação heterogênea. A arquitetura CUDA pode suportar APIs, incluindo OpenCL ou DirectX, e CUDA também suporta C, C++, Fortran, Java, Python e outras linguagens.
Qual é a relação entre OpenCL e CUDA?
A relação entre CUDA e OpenCL não é uma relação de conflito, mas sim uma relação inclusiva. OpenCL é uma API, no primeiro nível, a arquitetura CUDA é de nível superior, seja OpenCL, DX11 ou linguagem C, Fortran, computação DX11, podem ser suportados. Como desenvolvedor de programas, geralmente eles entendem apenas essas linguagens ou APIs, e podem usar múltiplas linguagens para desenvolver seus próprios programas, não importa qual linguagem escolham; desde que queiram chamar o poder de processamento da GPU, podem usar o CUDA para programar nessa arquitetura. As diferenças técnicas entre OpenCL e CUDA se refletem principalmente no método de implementação. CUDA baseado na linguagem C é empacotado em um código fácil de escrever, então até pesquisadores que não estão familiarizados com a construção de chips podem usar ferramentas CUDA para escrever programas práticos. Embora o OpenCL seja sintaticamente próximo do CUDA, ele enfatiza mais as operações subjacentes, tornando-se mais difícil, mas por causa disso, o OpenCL pode rodar em várias plataformas. CUDA é uma arquitetura de computação paralela que contém uma arquitetura de conjunto de instruções e um mecanismo de hardware correspondente. OpenCL é uma interface de programação de aplicações (API) para computação paralela, e OpenCL é um novo caminho de desenvolvimento de programas CUDA, além do C para CUDA na arquitetura NVIDIA CUDA. Se você quiser ter mais controle sobre o hardware, pode usar a API do OpenCL para programar, e se não souber muito sobre a API, também pode programar no CUDA C, que são duas formas diferentes de programar, e têm suas semelhanças e diferenças. Mas há um pouco que, quando as linguagens OpenCL e CUDA C são desenvolvidas, em computação paralela, seus conceitos são semelhantes, esses dois programas têm grandes semelhanças entre eles, então é relativamente fácil portar programas um para o outro.
A linguagem C do CUDA é posicionada de forma diferente do OpenCL, ou seja, usa pessoas diferentes. CUDA C é uma linguagem de alto nível que pode ser facilmente usada por não profissionais que não sabem muito sobre hardware; O OpenCL é uma interface de desenvolvimento de aplicações orientada a hardware, que dá aos programadores mais controle sobre o hardware, e será mais difícil começar e desenvolver. Os hábitos de uso dos programadores também são muito importantes; aqueles que usam a linguagem C na plataforma CPU X86 aceitam facilmente a linguagem C baseada na plataforma GPU CUDA; Pessoas acostumadas a usar o desenvolvimento gráfico OpenGL serão mais amigáveis para ver o OpenCL, e será muito fácil desenvolver programas de computação relacionados a gráficos e vídeo com base nele.
|