(Fonte da imagem: Divulgação/NVIDIA)
A computação paralela é uma forma interessante de agilizar processos grandes demais. Na verdade, esse tipo de processamento pode ser comparado com a forma em que trabalhamos. Quando temos uma tarefa muito complexa para ser resolvida, acabamos dividindo-a em afazeres menores e mais fáceis de serem terminados.
Com isso, aos poucos, acabamos também conquistando o objetivo maior, composto pela soma dessas atividades reduzidas. Grosso modo, podemos dizer que é dessa maneira que a computação paralela funciona.
Quando uma tarefa muito complexa é executada, ela pode ser dividida em atividades mais simples, que são distribuídas pelos núcleos de um processador ou, até mesmo, enviadas para diferentes máquinas que integram um sistema computacional maior, como um cluster. Assim, o resultado é obtido mais rapidamente.
A CUDA é a plataforma de computação paralela desenvolvida pela NVIDIA, a qual tem ganhado cada vez mais notoriedade por seu desempenho. Neste artigos vamos explicar tudo sobre essa tecnologia.
O que é
CUDA, sigla para Compute Unified Device Architecture, é uma extensão para a linguagem de programação C, a qual possibilita o uso de computação paralela. A ideia por trás disso tudo é que programadores possam usar os poderes da unidade de processamento gráfico (GPU) para realizar algumas operações mais rapidamente.
Em suma, a GPU passa a operar como se fosse mais um CPU dentro máquina, aumentando a performance do sistema. Jogos de computadores costumam usar a CUDA para o cálculo de propriedades físicas, como efeitos de fogo, água e fumaça. Todavia, a tecnologia também é capaz de trabalhar com aplicações não gráficas, como softwares de criptografia e simulações biológicas.
No vídeo acima você pode conferir um simulador de partículas usando a CUDA para reproduzir as colisões de 65 mil partículas em tempo real.
Aproveitando o poder das GPUs
A GPU se torna mais apta para o trabalho de processamento paralelo por ter sido desenvolvida para atender à demanda de processos de computação 3D em alta resolução e em tempo real. Assim, com o passar do tempo, as GPUs modernas se tornaram muito eficientes ao manipular grandes quantidades de informações.
O fluxo de processamento em CUDA não é tão complexo. Para começar, os dados são copiados da memória principal para a unidade de processamento gráfico. Depois disso, o processador aloca o processo para a GPU, que então executa as tarefas simultaneamente em seus núcleos. Depois disso, o resultado faz o caminho inverso, ou seja, ele é copiado da memória da GPU para a memória principal.
GeForce GTX 550 Ti possui 192 núcleos CUDA (Fonte da imagem: Divulgação/NVIDIA)
Na unidade de processamento gráfico, todo esse processamento é feito dentro dos núcleos CUDA (conhecidos como CUDA Cores), os quais podem ser comparados com os núcleos de um processador comum. Por isso, quanto mais núcleos CUDA tiver a placa de vídeo, melhor.
Nem tudo é perfeito
Como era de se esperar, a tecnologia da NVIDIA não é a solução para todos os problemas. A CUDA possui algumas limitações que devem ser levadas em conta pelos programadores ao desenvolverem seus softwares.
A renderização de texturas, por exemplo, não é suportada pela CUDA. Além disso, as diversas cópias realizadas entre uma memória e outra podem causar algum impacto no desempenho geral das aplicações, mas isso varia de acordo com o barramento do sistema.
Outro problema a ser considerado diz respeito à compatibilidade do software desenvolvido dessa forma. Lembre-se de que a CUDA é uma tecnologia da NVIDIA e, portanto, ela só funciona com placas de vídeo fabricadas por essa empresa.
Uma alternativa mais aberta seria a OpenCL, desenvolvida inicialmente pela Apple. Caso o computador não tenha uma placa NVIDIA instalada, o código CUDA funcionará corretamente. Porém, como todo o processamento será feito pelo CPU, o desempenho será bem inferior.
Muito mais do que games
Por se tratar de uma plataforma que funciona com base em recursos da placa de vídeo, é comum que as pessoas pensem que a CUDA sirva apenas para a melhoria na execução de jogos. Contudo, como mencionamos anteriormente, essa tecnologia pode servir como um apoio à CPU – ajudando-a a processar os dados demandados.
(Fonte da imagem: Divulgação/NVIDIA)
As aplicações práticas da plataforma de computação em paralelo da NVIDIA são inúmeras e bem variadas. Por exemplo, a Harvard Engineering, a Harvard Medical School e o Brigham & Womens Hospital combinaram esforços para usar GPUs com o objetivo de simular o fluxo sanguíneo e identificar placas arteriais ocultas sem fazer uso de técnicas invasivas ou cirurgias exploratórias.
Modelos computacionais baseados na CUDA também estão ajudando o National Airspace System (Sistema de Espaço Aéreo Nacional) a gerenciar o fluxo de tráfego aéreo. Além disso, usando esse mesmo sistema, equipes da NASA reduziram o tempo de análise do espaço aéreo de dez minutos para três segundos.
Existem ainda alguns usos inusitados, como é o caso da empresa General Mills, que resolveu aplicar a CUDA para descobrir qual é a melhor forma de assar uma pizza congelada no forno micro-ondas. Em vez de assar milhares de pizzas, a companhia usou modelos virtuais do alimento para descobrir como elas recebiam os efeitos da radiação de micro-ondas. Foi mais rápido e mais barato realizar testes virtuais antes de partir para a prática.
(Fonte da imagem: Reprodução/iStock)
Outro uso prático da tecnologia foi implementado pela SeismicCity, que usou a funcionalidade fornecida pela NVIDIA para aumentar as chances de encontrar petróleo. Como a perfuração do solo custa milhões de dólares, a empresa não pode errar. Por isso, um software de processamento de imagem capaz de analisar dados sísmicos ajuda a organização a encontrar o local correto mais rapidamente.
É claro que nem todo tipo de software pode se beneficiar da velocidade fornecida pela CUDA. Para obter um desempenho maior, o software desenvolvido precisa usar centenas de processos paralelos.
Caso o programa seja mais tradicional, com código mais linear, ele não se beneficiará da tecnologia. Em outras palavras, se você não puder dividir o “problema” em pelo menos mil pecinhas, ele não deve ser implementado com CUDA.
Categorias