OpenCL nas tarefas diárias
Recentemente, conversamos sobre o HSA e, durante a discussão das vantagens da nova abordagem para a criação de PCs, abordamos um tópico tão interessante como GPGPU - computação de uso geral em um acelerador gráfico. Hoje, os aceleradores de vídeo da AMD fornecem acesso aos seus recursos usando o OpenCL, uma estrutura que fornece um sistema altamente paralelo programável e relativamente simples e intuitivo.Hoje, as tecnologias OpenCL são suportadas por todos os principais players do mercado: a capacidade de fornecer programas com acesso à aceleração "avançada" (também gratuita, já que o OpenCL não implica royalties ou royalties) vale claramente a pena, e todos se beneficiam da versatilidade dessas APIs que implementa o suporte OpenCL em seus produtos.Leia mais sobre onde você pode encontrar o OpenCL no dia a dia de hoje, como ele acelera o software de escritório comum e que oportunidades ele abre para os desenvolvedores hoje e conversaremos.GPGPU, OpenCL e um pouco de história
Obviamente, o OpenCL não é a única maneira de implementar a computação geral da GPU. Além do OpenCL, existem CUDA, OpenACC e C ++ AMP no mercado, mas as duas primeiras tecnologias são realmente populares e conhecidas.As mesmas pessoas que deram ao mundo as tecnologias OpenGL e OpenAM: Khronos Group, estavam desenvolvendo o padrão OpenCL. A própria marca registrada OpenCL é de propriedade da Apple, mas, felizmente para programadores e usuários em todo o mundo, essa tecnologia não está fechada ou vinculada aos produtos da empresa "apple". Além da Apple, o Khronos Goup inclui gigantes do mercado como Activision Blizzard, AMD, IBM, Intel, NVidia e uma dúzia de empresas (principalmente fabricantes de soluções ARM) que ingressaram no consórcio posteriormente.Até certo ponto, o OpenCL e o CUDA são ideologicamente e sintaticamente semelhantes, dos quais a comunidade apenas se beneficiou. Devido à semelhança de certos métodos e abordagens, é mais fácil para os programadores usar ambas as tecnologias, mudar de um hardware "fechado" e NVidia CUDA para universal e trabalhar em qualquer lugar (incluindo CPUs multi-core comuns e supercomputadores baseados na arquitetura CELL) .OpenCL no uso diário
Agora você pensa: "Sim, eles falam sobre jogos e photoshop". Não, o OpenCL é capaz de acelerar a computação além de apenas gráficos. Um dos aplicativos mais populares que usam os recursos do GPGPU é ... um pacote de escritório de plataforma cruzada, o LibreOffice. O suporte ao OpenCL apareceu nele em 2014 e é usado para acelerar os cálculos no gerenciador de tabelas do Calc.Aqui está uma comparação visual do desempenho do sistema com o AMD A10-7850K com o núcleo gráfico R7 e o Intel Core I5 com o HD4600 a bordo:Em testes sintéticos, o mesmo AMD A10-7850K em computação heterogênea usando OpenCL supera o i5-4670K / 4690 quase duas vezes mais caro :A propósito, na ciência e em suas áreas aplicadas, existem muitas tarefas que mudam perfeitamente para os processadores vetoriais de aceleradores de vídeo e permitem realizar cálculos dezenas e centenas de vezes mais rápido que na CPU.Por exemplo, várias seções da álgebra linear. Multiplicação de vetores e matrizes é o que as GPUs fazem todos os dias, trabalhando com gráficos. Nessas tarefas, eles praticamente não são iguais, porque sua arquitetura foi aprimorada para resolver esses problemas há anos.Isso também inclui a rápida transformação de Fourier e tudo o que está conectado a ela: resolver equações diferenciais complexas por vários métodos. Separadamente, podemos distinguir os problemas gravitacionais dos corpos Nutilizados no cálculo da aerodinâmica e hidrodinâmica, modelagem de líquidos e plasma. A complexidade dos cálculos reside no fato de que cada partícula interage com outras, as leis da interação são bastante complicadas e os cálculos precisam ser realizados em paralelo. Para tais tarefas, os recursos OpenCL e AMD GPU são perfeitamente adequados, como computação paralela com muitos objetos e resolvida com sucesso em processadores desse tipo todos os dias: em pixel shaders .Grades estruturadas são frequentemente usadas em gráficos rasterizados. Não estruturado - em cálculos no campo da hidrodinâmica e em vários cálculos com elementos cujos gráficos têm pesos diferentes. Diferenças entre grades estruturadas e não estruturadas no número de “vizinhos” de cada elemento: grades estruturadas têm a mesma diferença, grades não estruturadas têm diferentes, mas ambas se encaixam perfeitamente na capacidade do OpenCL de acelerar os cálculos. As dificuldades na transferência de cálculos são principalmente matemáticas. Ou seja, a principal tarefa do programador não é apenas "escrever" o trabalho do sistema, mas também desenvolver uma descrição matemática que transfira dados para recursos de hardware usando o OpenCL.Lógica combinatória (cálculo de hash também se aplica aqui), métodos de Monte Carlo- isso é bem portado para a GPU. Muitos módulos de computação, alto desempenho em computação paralela é o que realmente acelera esses algoritmos.O que mais pode ser acelerado com o OpenCL e GPUs poderosas?
Procure o caminho de volta. Cálculos gráficos e programação dinâmica: classificação, detecção de colisão (contato, interseção), geração de estruturas regulares, vários algoritmos de seleção e pesquisa. Com algumas limitações, mas elas se prestam à otimização e aceleração do trabalho de redes neurais e estruturas relacionadas, mas aqui, os problemas são mais prováveis de que as estruturas neurais sejam simplesmente “caras” para virtualizar, é mais lucrativo usar soluções FPGA. O trabalho de máquinas de estado finito (que já são usadas no trabalho com a GPU, por exemplo, quando se trata de compressão / descompressão de um sinal de vídeo ou trabalho para encontrar elementos duplicados) é excelente.OpenCL vs CUDA
Comparar diretamente o desempenho do OpenCL e CUDA faz pouco sentido. Primeiramente, se os compararmos nas placas de vídeo AMD e NVidia, os adaptadores de vídeo da AMD vencerão uma corrida difícil de recursos de computação: os aceleradores modernos da NVidia têm várias limitações de desempenho no formato FP64 introduzidas pela própria NVidia para vender placas de vídeo "profissionais" para (séries Tesla e Titan Z). Seu preço é incomparavelmente mais alto do que o de seus equivalentes FLOPS, com base nas soluções AMD e seus cartões “relacionados” na linha de números da NVidia, o que torna a comparação bastante complicada. Você pode levar em consideração o desempenho por watt ou a produtividade por dólar, mas isso não tem quase nada a ver com uma comparação pura do poder da computação: "FLOPS a qualquer custo" se encaixam fracamente na atual situação financeira,e em termos de desempenho por dólar, a “velha mulher” 7970 GHz Edition (também conhecida como R9 280X) ainda é uma das placas de vídeo mais lucrativas.Em segundo lugar, você pode tentar comparar o OpenCL e o CUDA em uma placa de vídeo da NVidia, mas a própria NVidia implementa o OpenCL através do CUDA no nível do driver, para que a comparação seja um pouco desonesta por razões óbvias.Por outro lado, se você levar em conta não apenas o desempenho, algumas análises ainda poderão ser feitas.O OpenCL roda em uma lista muito maior de hardware que o NVidia CUDA. Quase todas as CPUs que suportam o conjunto de instruções SSE 3, os aceleradores de vídeo da Radeon HD5xxx e NVidia GT8600 até os mais recentes APs da Fury / Fury-X e 980Ti / Titan X, APU da AMD, gráficos integrados da Intel - em geral, quase qualquer hardware moderno com vários núcleos pode tire proveito dessa tecnologia.
Os recursos de implementação do CUDA e do OpenCL (assim como a documentação bastante complicada, já que a programação paralela como um todo está longe da área de desenvolvimento mais fácil) refletem-se em recursos e ferramentas de desenvolvimento específicos, e não no campo da produtividade.Por exemplo, o OpenCL tem alguns problemas de alocação de memória devido a "A documentação do OpenCL não é muito clara aqui".Ao mesmo tempo, o CUDA é inferior ao OpenCL no campo da sincronização de fluxos - dados, instruções, memória, qualquer coisa. Além disso, usando o OpenCL, você pode usar filas e instruções fora de ordem, e o CUDA ainda sabe fazer o pedido em ordem. Na prática, isso evita o tempo de inatividade do processador enquanto aguarda os dados, e o efeito é mais perceptível, quanto maior a cobertura do processador e maior a diferença entre a velocidade da memória e a velocidade dos módulos de computação. Em poucas palavras: quanto mais energia você alocar no OpenCL, maior será a lacuna no desempenho. O CUDA exigirá a criação de código muito mais complexo para obter resultados comparáveis.Ferramentas de desenvolvimento (depurador, profiler, compilador) O CUDA é um pouco melhor que o similar no OpenCL, mas o CUDA implementa API através de C e OpenCL através de C ++, simplificando o trabalho com programação orientada a objetos, enquanto ambas as estruturas são abundantes com "local". »Truques, restrições e recursos.
A abordagem da NVidia neste caso é muito semelhante à maneira como a Apple funciona. Uma solução fechada, com um grande conjunto de restrições e regras estritas, mas bem aprimorada para trabalhar em um hardware específico.O OpenCL oferece ferramentas e recursos mais flexíveis, mas requer um nível mais alto de treinamento dos desenvolvedores. O código geral de um OpenCL puro deve ser executado em qualquer hardware que o suporte, mas ao mesmo tempo “otimizado” para soluções específicas (por exemplo, aceleradores de vídeo AMD ou processadores CELL) funcionará muito mais rápido. Source: https://habr.com/ru/post/pt388421/
All Articles