GPU

Introdução à programação GPU

Introdução à programação GPU

A computação de uso geral em uma GPU (Unidade de Processamento de Gráficos), mais conhecida como programação de GPU, é o uso de uma GPU junto com uma CPU (Unidade de Processamento Central) para acelerar a computação em aplicativos tradicionalmente manipulados apenas pela CPU.Embora a programação de GPU tenha sido praticamente viável apenas nas últimas duas décadas, seus aplicativos agora incluem praticamente todos os setores. Por exemplo, a programação de GPU tem sido usada para acelerar o processamento de vídeo, imagem digital e sinal de áudio, física estatística, computação científica, imagem médica, visão computacional, redes neurais e aprendizagem profunda, criptografia e até detecção de intrusão, entre muitas outras áreas.

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

A diferença entre uma GPU e uma CPU

Muito antes de os gráficos 3D de alta resolução e alta fidelidade se tornarem a norma, a maioria dos computadores não tinha GPU. Em vez disso, a CPU executou todas as instruções dos programas de computador, executando as operações aritméticas, lógicas, de controle e de entrada / 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, que é projetada para acelerar a criação de imagens para saída em um dispositivo de exibição, muitas vezes tem ajudado a CPU a resolver problemas em áreas que antes eram gerenciadas exclusivamente pela CPU.

O fabricante da placa de vídeo Nvidia oferece uma maneira simples de entender a diferença fundamental entre uma GPU e uma CPU: “Uma CPU consiste em alguns núcleos otimizados para processamento serial sequencial, enquanto uma GPU tem uma arquitetura massivamente paralela que consiste em milhares de núcleos menores e 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 pesquisar uma palavra em um documento, enquanto outras tarefas, como calcular a sequência de Fibonacci, não se beneficiam de nenhum 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 aprendizagem profunda imitam a atividade em camadas de neurônios no neocórtex, permitindo que as máquinas aprendam a compreender a linguagem, reconhecer padrões ou compor música.

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

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 exigiram a reformulação dos problemas computacionais na linguagem das placas gráficas.

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

CUDA

Lançado inicialmente pela Nvidia em 2007, CUDA (Compute Unified Device Architecture) é a estrutura proprietária dominante hoje. “Com CUDA, os desenvolvedores podem acelerar drasticamente os aplicativos de computação, aproveitando o poder das GPUs”, descreve a estrutura da Nvidia.

Os desenvolvedores podem chamar CUDA a partir de linguagens de programação como C, C ++, Fortran ou Python sem nenhuma habilidade em programação gráfica. Além do mais, o CUDA Toolkit da Nvidia contém tudo o que os desenvolvedores precisam para começar a criar aplicativos acelerados por GPU que superam significativamente seus equivalentes vinculados à CPU.

O CUDA SDK está disponível para Microsoft Windows, Linux e macOS. a plataforma CUDA também oferece suporte a outras interfaces computacionais, incluindo OpenCL, DirectCompute da Microsoft, OpenGL Compute Shaders e C ++ AMP.

OpenCL

Lançado inicialmente pelo Khronos Group em 2009, o OpenCL é o padrão aberto e livre de royalties mais popular para programação paralela de plataforma cruzada. De acordo com o Khronos Group, “OpenCL melhora muito a velocidade e a capacidade de resposta de um amplo espectro de aplicativos em várias categorias de mercado, incluindo jogos e títulos de entretenimento, software científico e médico, ferramentas criativas profissionais, processamento de visão e treinamento e inferência de rede neural.”

OpenCL foi implementado até agora 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 semelhante a C para escrever programas, mas existem APIs de terceiros para outras linguagens de programação e plataformas, como Python ou Java.

OpenACC

OpenACC é o padrão de programação mais novo para computação paralela descrito neste artigo. Foi inicialmente lançado em 2015 por um grupo de empresas que compreende Cray, CAPS, Nvidia e PGI (o Grupo Portland) para simplificar a programação paralela de sistemas heterogêneos de CPU / GPU.

“OpenACC é um modelo de programação paralela portátil baseado em diretiva orientado ao usuário, projetado para cientistas e engenheiros interessados ​​em portar seus códigos para uma ampla variedade de plataformas e arquiteturas de hardware HPC heterogêneas com significativamente menos esforço de programação do que o necessário com um baixo nível modelo.,”Afirma o OpenACC em seu site oficial.

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

Qual devo usar?

A escolha entre essas três plataformas de computação paralelas 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. OpenCL é de longe a plataforma de computação paralela mais portátil, embora os programas escritos em OpenCL ainda precisem ser otimizados individualmente para cada plataforma de destino.

Aprenda a codificação GPU no LinuxHint.com

Programação GPU com Python

Programação GPU com C++

Leitura Adicional

Para se familiarizar com o CUDA, recomendamos que você siga as instruções no Guia de início rápido do CUDA, que explica como fazer o CUDA funcionar no Linux, Windows e macOS. O Guia de Programação OpenCL da AMD fornece uma visão geral fantástica e detalhada do OpenCL, mas assume que o leitor está familiarizado com os três primeiros capítulos da Especificação do OpenCL. OpenACC oferece um tutorial introdutório de três etapas projetado para demonstrar como tirar proveito da programação de GPU, e mais informações podem ser encontradas na especificação OpenACC.

Como instalar o League Of Legends no Ubuntu 14.04
Se você é fã de League of Legends, esta é uma oportunidade para testar o funcionamento de League of Legends. Observe que LOL é suportado no PlayOnLinu...
Instale o último jogo de estratégia OpenRA no Ubuntu Linux
OpenRA é um motor de jogo de estratégia em tempo real Libre / Free que recria os primeiros jogos Westwood como o clássico Command & Conquer: Red Alert...
Instale o emulador Dolphin mais recente para Gamecube e Wii no Linux
O Dolphin Emulator permite que você jogue seus jogos de Gamecube e Wii escolhidos em computadores pessoais Linux (PC). Sendo um emulador de jogo disp...