Programação em placas gráficas, área quente na pesquisa em CG

Uma das áreas da computação que está vislumbrando mais inovações é a computação gráfica. Por quê ? Além da pesquisa tradicional, no qual tarefas difíceis como a pesquisa e o desenvolvimento de novos métodos de calcular iluminação cada vez mais realista e rápidos, métodos para calcular fluídos em movimento (especialmente água), pêlos, cabelos, grama (vegetação em geral), etc, são estudados, existe um campo quase que inteiramente novo (ou que pelo menos aumentou as possibilidades de abordagem de temas antigos): a programação de placas gráficas, GPU em inglês (graphic processor unit).

Pra quem não sabe, as GPUs estão no nível de desenvolvimento absurdo. Isso fica claro quando vemos para vender por preços relativamente acessíves placas gráficas com 512 Mb de Ram. Pensem bem, 512 só para lidar com a parte gráfica. É muita coisa. Mas não é só o tamanho da memória que as GPUs estão altamente desenvolvidas. Alguns dizem que, a Nvidia (a maior desenvolvedora de placas gráficas do mundo, a Geforce por exemplo, é dela) já gastou tanto em pesquisa de tecnologia para fazer placas gráficas cada vez melhores, que atualmente, eles estão num nível que seriam capazes de criarem processadores (CPUs) melhores que os da lider no mercado, a Intel, e que só não começaram a vender porque desembolsar rios de dinheiro para entrar numa competição onde o concorrente tem mais de 90% do mercado é ou dar tiro no próprio pé ou suícidio.

Essa afirmação acima, pode parecer exagerada para alguns, mas o nível de complexidade que as GPUs tem hoje está muito próximo do nível que as CPUs têm. Não é nenhum absurdo pensar que a Nvidia poderia fazer CPUs.

geforce placa poderosa
Vamos programar esse bichinho?

Mas além da velocidade e tudo mais que as GPUs estão oferencendo, a parte realmente legal é que ela agora está ficando parcialmente programável. Parcialmente porque, a GPU utiliza a arquitetura pipeline. Arquitetura pipeline, resumidamente, é um hardware que é composto de vários módulos menores, e esses módulos devem funcionar concorrentemente. A vantagem da arquitetura de pipeline é que enquanto um dado está sendo tratado no segundo módulo, outro pode ser tratado no primeiro (se esse não depender do dado que está sendo tratado no segundo módulo). Por exemplo, uma fábrica que monta carros usa a arquitetura de pipeline, pois num módulo, o os pneus são colocados, em outro o carro é pintado. Com essa arquitetura, é possível que dois carros(ou mais, depende de quantos módulos tem o seus sistema) sejam produzidos quase ao mesmo tempo, evitando subutilização dos recursos de hardware.

A GPU permite a programação de dois desses módulos.

A grande diferença é que dessa vez, usaremos os recursos da GPU e não da CPU, ou seja, vamos usar a memória da GPU e as instruções da GPU, não a memória RAM da CPU, e tampouco suas instruções. Em outras palavras, você vai progamar para o processador da placa gráfica, e não para o processdor de propósitos gerais do seu PC (a CPU).

As vantagem é que como a placa gráfica é processador dedicado para gráficos, ele tem muito mais vantagens que a CPU. Por exemplo, ela possui comandos nativos para lidar com vetores, pixels, etc. Mas a grande vantagem, na realidade, é que a placa gráica consegue lidar com mais de um pixel por vez, ou seja, é uma placa que pode processar vários pixels em paralelo.

Para programar a GPU temos agora a disposição várias linguagens, e a mais usada é a C for graphics, que como o nome dá a entender, é bastante similar a C, mas para placas gráficas ; )

Na realidade, antes já existiam linguagens, mas era muito similares a um assembly, o que inviabilizava a programação para a maior parte das pessoas porque programar em assembly é um saco : P

Mas voltando, C for graphics permite atualmente a programação de dois módulos das GPUs atuais, o vertex shader, e o fragment shader. Num próximo post eu entro em detalhes sobre o pipeline das placas gráficas e consequentemente falo das vantagens e possibilidades programando o vertex e o fragment shader.

Anúncios

4 comentários sobre “Programação em placas gráficas, área quente na pesquisa em CG

  1. Olá amigo, interessante esse artigo. Estava de fato precisando montar uma pipeline gráfica em C++. Você teria algum projeto pra me indicar, pois os princípios geométricos de CG eu domino em um certo grau, mas o que eu estou penando é implementar isso em código… XD
    Att

  2. Ola mariane,

    meus parabéns pelo seu blog….
    sou estudante de ciências da computação em goiânia e estou iniciando meu TCC, e vou abordar justamente esse tema: programação de propósito geral em placas gráficas…
    gostei muito do seu post, como vc disse é uma área bem recente e díficil de se obter material.

    fiquei seu fã…..
    abraços e até +

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s