Introdução à programação da GPU

Introdução à programação da GPU

A computação de uso geral em uma GPU (unidade de processamento gráfico), mais conhecida como programação de GPU, é o uso de uma GPU juntamente com uma CPU (unidade de processamento central) para acelerar a computação em aplicativos tradicionalmente tratados apenas pela CPU.Embora a programação da GPU tenha sido praticamente viável apenas nas últimas duas décadas, suas aplicações agora incluem praticamente todos os setores. Por exemplo, a programação da GPU tem sido usada para acelerar o vídeo, imagem digital e processamento de sinais de áudio, física estatística, computação científica, imagem médica, visão computacional, redes neurais e aprendizado profundo, criptografia e até detecção de intrusões, entre muitas outras áreas.

Este artigo serve como uma introdução teórica destinada àqueles que gostariam de aprender a escrever programas acelerados por GPU, bem como para aqueles que têm apenas um interesse geral nesse tópico fascinante.

A diferença entre uma GPU e uma CPU

Há muito tempo antes de os gráficos 3D de alta resolução e alta fidelidade se tornaram a norma, a maioria dos computadores não tinha GPU. Em vez disso, a CPU realizou todas as instruções dos programas de computador, executando as operações aritméticas, lógicas, de controle e saída (E/S) básicas especificadas pelas instruções. Por esse motivo, a CPU é frequentemente descrita como o cérebro do computador.

Mas, nos últimos anos, a GPU, projetada para acelerar a criação de imagens para saída para um dispositivo de exibição, tem ajudado a CPU a resolver problemas em áreas que foram tratadas anteriormente apenas pela CPU.

O fabricante de placas gráficas NVIDIA fornece uma maneira simples de como entender a diferença fundamental entre uma GPU e uma CPU: “Uma CPU consiste em alguns núcleos otimizados para processamento serial seqüencial, enquanto uma GPU possui uma arquitetura massivamente paralela que consiste em milhares de menores, mais eficientes núcleos projetados para lidar com várias tarefas simultaneamente.”

A capacidade de lidar com várias tarefas ao mesmo tempo torna as GPUs altamente adequadas para algumas tarefas, como procurar uma palavra em um documento, enquanto outras tarefas, como calcular a sequência de Fibonacci, não se beneficia de processamento paralelo.

No entanto, entre as tarefas que se beneficiam significativamente do processamento paralelo está o aprendizado profundo, uma das habilidades mais procuradas em tecnologia hoje. Algoritmos de aprendizado profundo imitam a atividade em camadas de neurônios no neocórtex, permitindo que as máquinas aprendam a entender a linguagem, reconhecer padrões ou compor músicas.

Como resultado da crescente importância da inteligência artificial, a demanda por desenvolvedores que entendem a computação de uso geral em uma GPU tem sido alta.

CUDA versus OpenCl versus OpenACC

Como as GPUs entendem os problemas computacionais em termos de primitivas gráficas, os primeiros esforços para usar as GPUs como processadores de uso geral exigiam reformular problemas computacionais na linguagem das placas gráficas.

Felizmente, agora é muito mais fácil fazer computação acelerada por GPU, graças a plataformas de computação paralela, como CUDA, OpenCL ou OpenACC da NVIDIA. Essas plataformas permitem que os desenvolvedores ignorem a barreira do idioma que existe entre a CPU e a GPU e, em vez disso, se concentre em conceitos de computação de nível superior.

CUDA

Inicialmente divulgado pela NVIDIA em 2007, o CUDA (computação unificada de arquitetura de dispositivos) é a estrutura proprietária dominante hoje. "Com o CUDA, os desenvolvedores são capazes de acelerar drasticamente os aplicativos de computação aproveitando o poder das GPUs", descreve a estrutura NVIDIA.

Os desenvolvedores podem chamar CUDA de linguagens de programação como C, C ++, Fortran ou Python sem nenhuma habilidade em programação gráfica. Além disso, o kit de ferramentas CUDA da NVIDIA contém tudo o que os desenvolvedores precisam para começar a criar aplicativos acelerados por GPU que superem muito seus colegas ligados à CPU.

O CUDA SDK está disponível para Microsoft Windows, Linux e MacOS. A plataforma CUDA também suporta outras interfaces computacionais, incluindo o OpenCL, a Microsoft da Microsoft, os shaders de computação OpenGL e o amp C ++.

OpenCl

Inicialmente divulgado pelo Khronos Group em 2009, o OpenCL é o padrão aberto mais popular e livre de royalties para programação paralela de plataforma cruzada e paralela. De acordo com o grupo Khronos, “o OpenCL melhora bastante a velocidade e a capacidade de resposta de um amplo espectro de aplicações em inúmeras categorias de mercado, incluindo títulos de jogos e entretenimento, software científico e médico, ferramentas criativas profissionais, processamento de visão e treinamento de rede neural e inferências.”

Até agora, o OpenCL foi implementado por Altera, AMD, Apple, Arm, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx e Ziilabs, e suporta todos os sistemas operacionais populares em todas as principais plataformas, tornando -o extremamente versátil. OpenCl define uma linguagem do tipo C para escrever programas, mas existem APIs de terceiros para outras linguagens e plataformas de programação, como Python ou Java.

OpenAcc

OpenAcc é o padrão de programação mais jovem para computação paralela descrita neste artigo. Foi lançado inicialmente em 2015 por um grupo de empresas que compreendem Cray, Caps, Nvidia e PGI (The Portland Group) para simplificar a programação paralela de sistemas heterogêneos de CPU/GPU.

“ modelo.,”States OpenACC em seu site oficial.

Os desenvolvedores interessados ​​no OpenACC podem anotar C, C ++ e FORTRAN Código para informar à GPU quais áreas que devem ser aceleradas. O objetivo é fornecer um modelo para a programação do acelerador que seja portátil entre os sistemas operacionais e vários tipos de CPUs e aceleradores hospedeiros.

Qual devo usar?

A escolha entre essas três plataformas de computação paralela depende de seus objetivos e do ambiente em que você trabalha. Por exemplo, Cuda é amplamente utilizado na academia e também é considerado o mais fácil de aprender. O OpenCL é de longe a plataforma de computação paralela mais portátil, embora os programas escritos no OpenCL ainda precisem ser otimizados individualmente para cada plataforma de destino.

Aprenda a codificação da GPU no Linuxhint.com

https: // linuxhint.com/gpu-programação-python/

https: // linuxhint.com/gpu-programação-cpp/

Leitura adicional

Para se familiarizar com o CUDA, recomendamos que você siga as instruções no guia de início rápido do CUDA, o que explica como colocar o CUDA em funcionamento no Linux, Windows e MacOS. O Guia de Programação OpenCL da AMD fornece uma visão geral fantástica e aprofundada do OpenCL, mas pressupõe que o leitor esteja familiarizado com os três primeiros capítulos da especificação OpenCL. O OpenACC oferece um tutorial introdutório de três etapas projetado para demonstrar como aproveitar a programação da GPU, e mais informações podem ser encontradas na especificação OpenACC.