• Nenhum resultado encontrado

2.4 Abordagens específicas

2.4.1 Placas gráficas

A arquitectura estabelecida actualmente no que respeita ao hardware dedicado para o processamento gráfico, denominado como placa gráfica 5, é principalmente dirigida para o processo de rasterização de imagens partindo de um conjunto de geometria e texturas definidas para um cenário. No entanto, como se pode observar pelas características apresentadas nos últimos modelos de placas gráficas lançadas no mercado, como seja a inclusão de um conjunto de 256 “

stream processors

” (Buck 2004; Nvidia 2008), denota uma tendência para uma maior gama de aplicabilidade deste tipo de recursos em problemas fora do âmbito da computação gráfica, e mais propriamente fora do processo de rasterização.

Fora do âmbito dos problemas clássicos em que as placas gráficas podem ser utilizadas encontra-se um conjunto de algoritmos, também clássicos, como seja o caso da

Fast Fourier Transform

(FFT), do cálculo matricial e Álgebra Linear básica (Buck 2004). A implementação destes algoritmos em placas gráficas demonstraram que a sua eficiência rivaliza com as implementações standard no CPU numa grande variedade de problemas do foro do cálculo matemático. A principal vantagem das placas gráficas sobre os modelos genéricos de CPUs é a presença de um elevado número de unidades de vírgula flutuante e cálculo de inteiros, para além do também elevado nível de paralelismo, quer espacial quer temporal, que beneficia amplamente as operações sobre matrizes e valores escalares.

Embora as placas gráficas não estejam ainda focadas para implementação de algoritmos da área do

ray tracing

, várias são as primitivas partilhadas entre os algoritmos de rasterização e os algoritmos de

ray tracing

, fazendo com que este tipo de hardware se apresente atractivo para a implementação dos referidos algoritmos de

ray tracing

. O rápido desenvolvimento nas arquitecturas das placas gráficas, nomeadamente no poder de cálculo e na razão entre o poder de cálculo e o custo, torna ainda mais fácil e apetecível o desenvolvimento aplicações na área do

ray tracing

.

Uma abordagem mais genérica com o objectivo de criar uma plataforma ou ambiente de desenvolvimento fácil foi desenvolvida por Buck et al. (Buck 2004), baseada no paradigma de

streaming

que é bastante adaptável à arquitectura seguida nas placas gráficas.

A definição de uma linguagem de

streaming

de uso generalista por parte de Buck et al. (Buck 2004) para o modelo de programação das placas gráficas, demonstra a versatilidade e o poder do hardware gráfico presente na grande maioria dos computadores pessoais de média e alta gama. A linguagem definida aproveita a arquitectura do tipo SIMD presente nas placas gráficas, os diferentes processadores de vértices e de fragmentos, a memória para texturas e registos internos, para implementar um ambiente de programação orientado ao paradigma de

streaming

.

As

streams

são matrizes de elementos de tipo de dados homogéneos que podem ser processadas em paralelo por módulos de código denominados de

kernels

. O resultado da aplicação dos

kernels

aos elementos de uma

stream

de entrada pode ser ligado a outros

kernels

para processamento posterior. Parâmetros de entrada simples podem ser colocados nos registos internos da placa gráfica, com acesso apenas de leitura. Toda a especificidade do hardware onde a aplicação é executada é ocultada pelo compilador/

linker

e bibliotecas da linguagem definida, restando ao utilizador apenas implementar os

kernels

com os algoritmos que pretende executar e indicar as respectivas entradas e saídas,

streams

.

Este tipo de abordagem tem uma boa adaptação a problemas com um comportamento do tipo SIMD, no entanto subsiste um problema de implementação que pode prejudicar a eficiência. Este problema é a falta de instruções de

branching

(salto do programa para outro bloco de código) nos processadores de vértices e de fragmentos das placas gráficas, que leva à execução completa de um fragmento de código,

kernel

neste caso, mesmo que não seja necessário. Esta situação impõe determinadas limitações na implementação de algoritmos que

dependam muito deste tipo de facilidade como seja o caso de percorrer uma octree.

Seguindo esta abordagem Purcell et. al (Purcell 2004) implementou um

ray tracer

fotorealista em tempo real. Segundo o autor a tecnologia VLSI (

Very-

Large-Scale Integration

) atingiu um patamar capaz de colocar num só chip o poder computacional necessário para uma implementação de

ray tracer

em tempo real.

Ainda segundo o autor, a maioria dos

renderers

fotorealísticos de alta fidelidade geram imagens através de técnicas de iluminação global em cima da componente de

ray tracing

. O

ray tracing

em tempo real tem sido o objectivo procurado pela comunidade de computação gráfica desde de há muitos anos. Infelizmente é um processo bastante oneroso em termos de poder computacional.

Purcell (Purcell 2004) apresentada um modelo abstracto de um

stream

processor

para as recentes placas gráficas (GPU), permitindo que o GPU execute programas neste modelo definido. Descreve-se a implementação do

ray tracer

segundo o modelo de

streaming

no GPU, providenciando uma análise sobre a largura de banda e requisitos computacionais da implementação. O

ray tracer

implementado é utilizado também para avaliar a simulação de GPUs com modelos de execução avançados.

A utilização de técnicas de

photon mapping

no modelo implementado também foi estudada e avaliada. Finalmente são feitas considerações relativamente a tendências relativas à utilização do modelo computacional de

streaming

. Os resultados apresentados mostram que um

ray tracer

baseado no GPU e seguindo uma abordagem de num modelo de

streaming

tem o potencial de rivalizar ou mesmo superar algoritmos implementados no CPU, sem fundamentar a necessidade de aquisição de novo hardware, diminuindo desta forma o fosso entre

rendering

realístico e interactivo.

Purcell (Purcell 2004) ainda refere que apenas em anos recentes os supercomputadores e agrupamentos (

clusters

) de PCs (Samanta 2000; Samanta

2000) atingiram um nível suficiente para demonstrar aplicações de algoritmos de

ray tracing

com taxas interactivas que incluem a componente de iluminação global.

Ocorreu recentemente um avanço tecnológico na área do hardware gráfico, em que os pipeline funcionais fixos foram substituídos por processadores programáveis de vértices e fragmentos. Num futuro próximo, é provável que o pipeline das placas gráficas evolua para um processador de

streaming

mais genérico, capaz de realizar operações mais complexas que o

rendering

de triângulos (Purcell 2002).

Purcell avaliou a tendência na programabilidade de tais pipelines gráficos e a possibilidade de implementar um

ray tracer

neste tipo de hardware. Utilizado o simulador definido, é analisada a eficiência de uma implementação de um algoritmo

ray tracing

na nova geração de placas gráficas programáveis. Também é feita a comparação entre o hardware que não permite o

branching

utilizando uma implementação de múltipla passagens e uma arquitectura que permite o

branching

. Purcell (Purcell 2002) ainda apresenta como é possível implementar outras algoritmos de

ray tracing

, como seja o caso do

whitted ray tracing

,

path

tracing

e algoritmos de

rendering

híbridos, utilizando a abordagem proposta. Finalmente demonstra que o

ray tracing

em hardware gráfico poderá ser mais rápido em relação a implementações baseadas no CPU, bem como possa ser uma abordagem competitiva em relação ao modelo de

rendering

de triângulos.

Segundo Thompson et al. (Thompson 2002), recentemente as arquitecturas de hardware para gráficos tiveram a sua ênfase na versatilidade, oferecendo novas e avançadas formas de programar e reconfigurar o pipeline do processo gráfico. Também é estudado se é ou não possível utilizar as arquitecturas de hardware gráfico em problemas e algoritmos de índole genérico, tradicionalmente implementados em processadores vectoriais genéricos.

Thompson et al. apresenta uma plataforma de programação que é aplicada a uma grande variedade de problemas, incluindo a multiplicação de matrizes e 3-SAT. Comparando a eficiência de resultados na implementação em hardware

gráfico, com a implementação standard em CPU, é demonstrado que existe uma melhoria significativa do tempo de execução em muitos dos casos, bem como deixa espaço para futuros melhoramentos. São também analisados pontos onde se detectou constrangimentos no pipeline do hardware gráfico, sendo propostas ligeiras extensões as actuais arquitecturas por forma a contornar estes “

bottlenecks

”, que podem levar a um aumento significativo do poder de cálculo na implementação de algoritmos genéricos. Com base nos resultados obtidos e as tendências na área ao nível da microarquitectura, acredita-se que o hardware gráfico será cada vez mais importante na elevada eficiência dos sistemas computacionais standard.

A visão apresentada neste ponto tem em conta apenas a implementação dos algoritmos de

ray tracing

exclusivamente em placas gráficas, considerando apenas o processamento necessário para produzir os resultados pretendidos. Foi desprezado a intervenção do resto do sistema, nomeadamente o CPU, na configuração, programação e comunicações entre componentes do sistema.