You are on page 1of 57

Arthur Pereira Gregrio o Rodrigo Zanatta Rodriguez

GPU Computing vs. CPU Multinuclear: Anlise de desempenho para a processamento de iluminao por Ray Tracing em modelos tridimensionais ca

FOZ DO IGUACU - PR 2011

CESUFOZ - CENTRO DE ENSINO SUPERIOR DE FOZ DO IGUACU PARANA

GPU Computing vs. CPU Multinuclear: Anlise de desempenho para a processamento de iluminao por Ray Tracing em modelos tridimensionais ca

Arthur Pereira Gregrio o Rodrigo Zanatta Rodriguez

Trabalho de Concluso de Curso suba metido ao Centro de Ensino Superior de Foz do Iguau como parte dos rec quisitos bacharel para em obtenao c Cincia e da do grau de Computaao. c

Orientador: Gildomiro Bairros.

FOZ DO IGUACU - PR 2011

GPU Computing vs. CPU Multinuclear: Anlise de desempenho para a processamento de iluminao por Ray Tracing em modelos tridimensionais ca

Arthur Pereira Gregrio o Rodrigo Zanatta Rodriguez

Este exemplar corresponde ` redaao nal do a c trabalho de concluso de curso apresentado a como requisito parcial para obteno do grau ca de Bacharel em Cincia da Computao, CEe ca SUFOZ - Centro de Ensino Superior de Foz do Iguau, aprovada pela comisso formada c a pelos professores:

Gildomiro Bairros, MSc. Orientador

Weber Takaki, Esp. Avaliador Cesufoz

Itamar Pena Nieradka, Esp. Avaliador Cesufoz

Foz do Iguau, 25 de Novembro de 2011 c

DEDICATORIA

Dedicamos este trabalho as nossas fam lias e amigos, quem nos apoiou e incentivou quando achamos que tudo estava perdido...

AGRADECIMENTOS
Agradecemos inicialmente ao professor Gildomiro Bairros pelo apoio durante a orientaao, ao Dr. Thanassis Tsiodras pelo seu esplndido trabalho na criaao da c e c Renderer utilizada, ao grupo GPU Brasil pelo apoio na soluao de dvidas sobre a c u plataforma CUDA, nossas fam lias e amigos. O apoio de todos foi indispensvel durante a realizao deste trabalho. ca

Nove zer

pessoas um beb e

no a em

podem um

fams. e

Fred Brooks

Resumo
Com a crescente demanda por processamento de alta performance e paralelismo, foi necessrio que criassem formas de aproveitar um dispositivo presente em muitas maquinas a atuais e normalmente subutilizado: a GPU. Neste trabalho ser realizada uma comparaao de desempenho entre as plataformas a c GPGPU e CPU multinuclear utilizando as interfaces de programaao paralela CUDA e c INTEL TBB para renderizao de objetos tridimensionais iluminados por ray tracing. ca Keywords: General-Purpose Computation on Graphics Processing Units, Raytracing, CUDA.

Abstract
With the growing demand for high processing performance and parallelism, it was necessary to create ways to get a device present in many current machines and typically underutilized: GPU. In this study, we conducted a performance comparison between platforms using multicore CPU and GPGPU programming interfaces for parallel CUDA and Intel TBB for rendering three-dimensional objects illuminated by ray tracing. Keywords: General-Purpose Computation on Graphics Processing Units, Raytracing, CUDA.

Lista de Abreviaturas e Siglas


ALU API CU CUDA FPS GB GCC Ghz GPGPU Mhz MIMD MISD MLAA OpenCL OpenGL OpenMP SDL SIMD SIMT SISD Arithmetic Logic Unit Application Programming Interface Control Unit Compute Unied Device Architecture Frames Per Second Gigabytes GNU Compiler Collection Giga-hertz General-Purpose computation on Graphics Processing Units Mega-hertz Multiple Instruction Multiple Data Multiple Instruction Single Data Morphological Anti Aliasing Open Computing Language Open Graphics Library Open Multi-Processing Simple DirectMedia Layer Single Instruction Multiple Data Single Instruction Multiple Threads Single Instruction Single Data

Intel TBB Intel Threading Building Blocks

Lista de Figuras
2.1 Comparao evolutiva entre CPUs e GPUs na capacidade processamento ca de operaes de ponto utuante . . . . . . . . . . . . . . . . . . . . . . . . co 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 Fluxo de trabalho do pipeline programvel . . . . . . . . . . . . . . . . . . a 6 8

CPU vs. GPU: arquitetura interna . . . . . . . . . . . . . . . . . . . . . . 10 Ray Tracing, como funciona . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Processamento Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Processamento Paralelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Segmentos do mercado que mais utilizam computaao paralela . . . . . . . 15 c Estrutura de camadas da arquitetura CUDA . . . . . . . . . . . . . . . . . 16 Sequencia de execuo do aplicativo entre a devide e o host . . . . . . . . . 19 ca

2.10 Grids de thread blocks do modelo de programao CUDA . . . . . . . . . . 21 ca 4.11 Modelo de complexidade simples, Chessboard . . . . . . . . . . . . . . . . 30 4.12 Modelo de complexidade mdia, Dodge Challenger 2007 . . . . . . . . . . . 30 e 4.13 Modelo de complexidade alta, Happy . . . . . . . . . . . . . . . . . . . . . 31 4.14 Tempo de renderizaao em cada cenrio para o modelo de baixa complexidade 33 c a 4.15 Taxa de FPS para o modelo de baixa complexidade . . . . . . . . . . . . . 33 4.16 Tempo de renderizaao em cada cenrio para o modelo de media complexidade 34 c a 4.17 Taxa de FPS para o modelo de media complexidade . . . . . . . . . . . . . 35 4.18 Tempo de renderizaao em cada cenrio para o modelo de alta complexidade 36 c a 4.19 Taxa de FPS para o modelo de alta complexidade . . . . . . . . . . . . . . 36

Lista de Quadros
2.1 2.2 Exemplo da chamada de um kernel . . . . . . . . . . . . . . . . . . . . . . 20 Cdigo de um aplicativo do tipo hello world escrito em CUDA. Fonte: o Galbraith (2009) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Lista de Tabelas
2.1 2.2 2.3 4.4 4.5 4.6 Taxonomia de Flynn de acordo com os uxos de instrues e dados . . . . 11 co Tipos de memoria presentes no device . . . . . . . . . . . . . . . . . . . . . 22 Principais funoes suportadas para cada verso de compute capability . . . 23 c a Resultados obtidos, modelo de baixa complexidade . . . . . . . . . . . . . 32 Resultados obtidos, modelo de mdia complexidade . . . . . . . . . . . . . 34 e Resultados obtidos, modelo de alta complexidade . . . . . . . . . . . . . . 35

Sumrio a

1 Introduo ca 1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 1.1.2 1.2 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivos Espec cos . . . . . . . . . . . . . . . . . . . . . . . . . .

1 2 2 2 2 4 4 5 6 7 7 8 9 9 9

Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Fundamentao Terica ca o 2.1 2.2 Central Processing Unit - CPU . . . . . . . . . . . . . . . . . . . . . . . . Graphics Processing Unit - GPU . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Pipeline Grco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 2.2.1.1 2.2.1.2 2.2.1.3 2.3 Pipeline grco de funao xa . . . . . . . . . . . . . . . . a c Pipeline grco programvel . . . . . . . . . . . . . . . . . a a Shaders Grcos . . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . .

Computaao Heterognea c e 2.3.1

GPU Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1.1 CPU vs. GPU . . . . . . . . . . . . . . . . . . . . . . . .

2.4 2.5

Taxonomia de Flynn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Renderizao de Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 ca 2.5.1 2.5.2 Renderizaao Tridimensional . . . . . . . . . . . . . . . . . . . . . . 12 c Ray Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.6 2.7

Programaao Paralela c

Compute Unied Device Architecture - CUDA . . . . . . . . . . . . . . . . 15

2.7.1 2.7.2 2.7.3

Stream Processing

. . . . . . . . . . . . . . . . . . . . . . . . . . . 16

C for CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Modelo de Programao em CUDA . . . . . . . . . . . . . . . . . . 16 ca 2.7.3.1 2.7.3.2 2.7.3.3 2.7.3.4 2.7.3.5 A API CUDA . . . . . . . . . . . . . . . . . . . . . . . . . 17 Kernels e hierarquia de Threads . . . . . . . . . . . . . . 20

Hierarquia de Memria . . . . . . . . . . . . . . . . . . . . 21 o CUDA Compute Capability . . . . . . . . . . . . . . . . . 22 Cdigo de Exemplo . . . . . . . . . . . . . . . . . . . . . . 23 o 25

3 Ambiente Experimental 3.1

Estrutura F sica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.1 Mquina Utilizada . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 a

3.2

Estrutura Lgica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 o 3.2.1 3.2.2 Sistema Operacional . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Plataforma CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.2.1 3.2.3 3.2.4 CUDA Toolkit . . . . . . . . . . . . . . . . . . . . . . . . 26

3Ds MAX 2012 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Renderer C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2.4.1 Simple DirectMedia Layer . . . . . . . . . . . . . . . . . . 27

3.2.5

Renderer CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2.5.1 OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.2.6

Plataforma C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.6.1 3.2.6.2 Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Intel R Threading Building Blocks . . . . . . . . . . . . . 28 29

4 Implementao ca 4.1

Descriao do Estudo de Caso . . . . . . . . . . . . . . . . . . . . . . . . . . 29 c

4.1.1

Descrio dos Cenrios de Testes . . . . . . . . . . . . . . . . . . . 31 ca a 4.1.1.1 Cenrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 a

4.2

Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.1 4.2.2 4.2.3 Modelo de baixa complexidade, Chessboard . . . . . . . . . . . . . 32 Modelo de mdia complexidade, Dodge Challenger 2007 . . . . . . . 33 e Modelo de alta complexidade, Happy . . . . . . . . . . . . . . . . . 35 37

5 Consideraes Finais co 5.1 5.2 5.3

Problemas Durante os Testes . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Concluso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 a Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 39

Referncias e

Introduo ca

Com a evoluo do cenrio computacional moderno, sistemas que combinam o uso de ca a CPUs de mltiplos ncleos e GPUs de mltiplos ncleos trouxeram o processamento em u u u u massa a uma nova escala de desempenho (DAVID B. KIRK, 2010, p.4). Diversas reas da computaao que antes utilizavam processamento atravs de sera c e vidores compostos por apenas CPUs multinucleares esto mudando este paradigma e a passando a utilizar o poder dos sistemas heterogneos a seu favor. Devido a este fato os e sistemas General-Purpose computation on Graphics Processing Units (GPGPU) comeam c a ganhar atenao. c Seguindo a nova tendncia do mercado, em 2007, a nVidia Corporation apresentou e o Compute Unied Device Architecture (CUDA), uma plataforma proprietria baseada a na linguagem de programaao C/C++ para desenvolvimento paralelo, criada para ser c executada exclusivamente por suas unidades de processamento grco compat a veis. Logo o CUDA passou a ser palco de muitas pesquisas relacionadas ` minerao de dados, a ca pesquisa molecular, clculos complexos como a previso do tempo, dentre outras. a a Um ano depois do lanamento feito pela nVidia, foi apresentado ` comunidade openc a source o Open Computing Language (OpenCL), um framework 1 baseado na linguagem de programaao C para a escrita de aplicativos que executam sobre plataformas heterogneas, c e baseado em paralelismo de dados e tarefas, o OpenCL tornou-se um padro para este a tipo de desenvolvimento (KHRONOS, 2011a). Mantido pelo consrcio Khronos Group o o OpenCL trouxe uma resposta ` arquitetura proprietria apresentada pela nVidia, com a a a proposta de ser livre e compat com qualquer tipo de sistema heterogneo. Este passa vel e a ser um dos concorrentes diretos do CUDA. Com base nesta nesta nova necessidade computacional, este trabalho visa apresentar uma comparaao de desempenho entre as plataformas compostas por sistemas GPGPU c
Segundo (HORSTMANN, 2006), framework um conjunto de classes cooperativas que implementam e os mecanismos essenciais para um dom nio de problemas espec cos.
1

em relaao a um sistema composto apenas por CPUs multinucleares para o processamento c de clculos de insero de raios e iluminaao em um cena tridimensional utilizando ray a ca c tracing.

1.1

Objetivos

Nesta seo sero apresentados os objetivos que este trabalho busca alcanar. ca a c

1.1.1

Objetivo Geral

Apresentar um comparativo de desempenho que possa indicar a viabilidade do uso de um sistema GPGPU em relao a um sistema composto apenas por uma CPU multinuclear ca para a rendererizao de objetos tridimensionais iluminados por ray tracing. ca

1.1.2

Objetivos Espec cos

Conceituar sobre programao paralela e ray tracing; ca Demonstrar conceitos sobre CPU multinuclear, GPU e plataforma CUDA; Apontar as vantagens de se utilizar paralelismo em sistemas GPGPU em relaao a c sistemas com CPU multinucleares; Executar medio de desempenho para o tempo de renderizao, em segundos, de ca ca objetos tridimensionais utilizando a plataforma GPGPU e CPU multinuclear; Executar mediao de desempenho para a taxa Frames Per Second (FPS) durante a c apresentao das imagens geradas aps a renderizaao dos modelos tridimensionais ca o c nas plataformas GPGPU e CPU multinuclear; Apresentar os resultados obtidos tabulados em formato grco juntamente com os a dados da pesquisa.

1.2

Metodologia

A metodologia aplicada neste trabalho ser com base em reviso bibliogrca e anlise a a a a quantitativa dos dados gerados pelos testes propostos com base nos cenrios aplicados. Os a

dados sero apresentados em forma de grco juntamente com a pesquisa e uma concluso a a a sobre o assunto desenvolvido.

Fundamentao Terica ca o

Neste cap tulo sero apresentados os principais conceitos, tcnicas e tecnologias ena e volvidas e necessrias para a compreenso e desenvolvimento deste trabalho. a a

2.1

Central Processing Unit - CPU

CPU o hardware responsvel por todo o controle do uxo de processamento das e a informaes atravs de instruoes escritas em linguagem de mquina, como por exemplo co e c a o assembly 1 , onde os programadores podem denir o que ela ir fazer e como ela ir fazer a a (BRAIN, 2000). Com o passar do anos o design das CPUs mudou drasticamente, hoje existem dispositivos que oferecem suporte para processamento de 64 bits e multiprocessamento atravs e de mltiplos ncleos, sendo eles f u u sicos ou lgicos porm elas ainda continuam sendo como e postas por duas unidades bsicas: a Arithmetic Logic Unit (ALU) local de execuo das operaoes bsicas de lgica e ca c a o matemtica a Control Unit (CU) responsvel pela movimentao dos dados entre a memria sistema a ca o e a CPU, alm da decodicao e execuao das informaes contidas nestes dados. e ca c co Seu modo de execuo sequencial baseia-se em quatro etapas: fetch, decode, execute ca e writeback sendo que em cada uma delas ocorrem as seguintes operaoes: c Fetch: per odo em que a informaao a ser processada trazida da memria do c e o sistema para a memria da CPU. Este processo poss graas ao Program Counter o e vel c que armazena em um ndice as referncias para o local da memria dos programas e o em execuao (LIN, 2003); c
O mesmo que linguagem de mquina, porm no lugar dos comandos numricos foram colocados a e e sequncias de caracteres para que haja fcil memorizao pelo programador (BARTLETT, 2003, p.5). e a ca
1

Decode: quando atravs do Opcode a CPU dene que tipo de operaao ser realizada e c a com aquele dado espec co (LIN, 2003); Execute: quando a informao efetivamente est sendo processada pela CPU. Neste ca a momento ento a CPU pode invocar o uso da ALU para execuo das operaes de a ca co lgica ou matemtica (LIN, 2003); o a Writeback : quando o resultado do processamento devolvido ao programa em sua e area de memria (LIN, 2003). o De acordo com Faria (2009), processadores convencionais so otimizados para cla a culos sequenciais, fazendo com que estas no sejam a melhor escolha em um ambiente a massivamente paralelo. Paralelismo o futuro da computao, porm a indstria continuar adicionando cores e ca e u a aos microprocessadores em detrimento ao aumento da performance em single-threads 2 (JOHN D. OWENS MIKE HOUSTON, 2008).

2.2

Graphics Processing Unit - GPU

Inicialmente projetadas para processamento grco, as GPUs passaram por inmeras a u mudanas at atingir o patamar de desempenho que hoje apresentam (VIANA, 2009). c e Com crescimento da indstria de jogos as pipelines de funo xa passaram a no u ca a atender mais as necessidades dos programadores. Com o surgimento dos shaders as GPUs ganharam a capacidade de processamento sequencial como as CPUs, passando a chamar atenao dos programadores que buscavam alto poder de paralelismo (FARIA, 2009). c Os pipelines grcos de funao xa eram a forma mais utilizada para aplicar transfora c maoes vetoriais a uma imagem, seja ela tridimensional ou bidimensional, os programadoc res tinham funoes xas pr-denidas para uso e no havia uma forma de personaliz-las. c e a a Normalmente estas funoes seguiam normas que eram padro do mercado, tais como c a DirectX 3 ou Open Graphics Library (OpenGL)4 .
Tipo de processamento onde apenas um processo executador por vez em um unico ncleo. e u Microsoft DirectX uma coleo de APIs que tratam de tarefas relacionadas a programao de e ca ca jogos para o sistema operacional Microsoft Windows, quem padroniza a comunicao entre software e e ca hardware (HARDWARE CLUBE, 2008) 4 Uma biblioteca especicada como padro para escrita de aplicativos que utilizem grcos em trs ou a a e duas dimenses, mantido pelo consrcio Khronos Group como uma API Open-Source (KHRONOS, 2011b). o o
3 2

Com a chegada dos pipelines programveis em meados de 2003 o conceito de prograa maao para GPUs mudou, pois eles permitiram um maior controle das funoes grcas c c a alm da personalizao sobre a forma como tais funoes seriam executadas (GUSMO, e ca c a 2010). A gura 2.1 apresenta o crescimento do poder computacional das GPUs em relao ca as CPUs entre os anos de 2003 e 2009.

Figura 2.1: Comparao evolutiva entre CPUs e GPUs na capacidade processamento de opeca raes de ponto utuante co

Fonte: nVidia (2010b, p.2)

As GPUs possuem realmente um poder muito mais elevado de processamento pois foram desenvolvidas para executar uma quantidade muito elevada de clculos matemticos a a e processamento paralelo intenso (ALVARO CUNO, 2011).

2.2.1

Pipeline Grco a

O pipeline grco uma representaao conceitual da forma como os dados so paa e c a ralelamente processados pela GPU. O pipeline grco, de um modo geral, recebe dados a

geomtricos primitivos (tais como cor, posiao e textura) e os transforma atravs de cle c e a culos matemticos para que seja formada a imagem e posteriormente exibida na tela. a 2.2.1.1 Pipeline grco de funo xa a ca

O pipeline grco de funo xa ou tambm conhecido como pipeline convencional a ca e e composto por vrios estgios, executados atravs de parmetros denidos por uma API a a e a previamente associada (IKEDA, 2011). Estes estgios compreendem: a Operaes com vrtices: os vrtices recebidos pelo pipeline so convertidos em trico e e a angulos; Rasterizaao: ato de desenhar linhas de um ponto a outro no espao ou desenhar c c pol gonos a partir de trs ou mais pontos (SANTEE, 2005, p.159); e Operaes com Fragmentos: os vrtices so combinados dando origem aos fragmenco e a tos, o passo que mais demanda de poder computacional, pois nesta etapa em e e que a cor nal calculada de forma paralela; e Composiao: a criao da imagem nal atravs dos fragmentos. c ca e Com funoes xas dentro do pipeline sem a possibilidade de personalizaao ou reescrita c c durante a programao, os pipelines de funao xa passaram a ser um entrave durante a ca c elaboraao de efeitos mais complexos. c 2.2.1.2 Pipeline grco programvel a a

Visando transpor os problemas das funoes xas no pipeline de funao xa, a indstria c c u trouxe aos programadores os pipelines programveis. a Com funes xas denidas de fbrica, a criaao de efeitos grcos mais complexos co a c a acabou sendo comprometida. Visando maior exibilidade e melhor aproveitamento do hardware grco, os estgios de manipulao de vrtices e fragmentos passaram a ser toa a ca e talmente programveis. Houve tabm a adiao de mais um estgio ao pipeline programvel a e c a a o geometry shader (IKEDA, 2011). A gura 2.2 apresenta os estgios de funcionamento de um pipeline programvel. a a

Figura 2.2: Fluxo de trabalho do pipeline programvel a

Fonte: adaptado de Wikipedia (2011c)

Vertex Shader : adiciona os efeitos aos objetos tridimensionais atravs da manipue laao de suas primitivas; c Geometry Shader : renderiza uma cena e gera novas primitivas a partir dos dados vindos do processamento realizado pelo vertex shader. Pixel Shader : ou Fragment Shader, adiciona os efeitos de cores e iluminaao aos c objetos; 2.2.1.3 Shaders Grcos a

Shaders so pequenos programas que executam dentro de GPUs ou processadores a compat veis. Marcaram a transiao entre o uso de pipelines de funo xa e o uso de c ca pipelines programveis (ZIBULA, 2009). a

2.3

Computao Heterognea ca e

Segundo Sipahi (2009), quando se fala em usar placas de v deo e processadores em conjunto, ou em processadores com vrios ncleos que cumprem funoes diferentes para a u c processar algum tipo de informaao, estamos falando de Computao Heterognea. c ca e De acordo com Sipahi (2009), este conceito d nome a sistemas computacionais onde o a processador ou ncleo central auxiliado por outros elementos do sistema para a execuao u e c de um tarefa. A computaao heterognea apresenta uma srie de novas fronteiras as serem explorac e e das, mas tambm trs problemas que no existiam quando usada a computao convencie a a ca onal. Um destes problemas a otimizao de cdigo, visto que o software est anos atrs e ca o a a do hardware no quesito paralelismo. Assim um processador com quatro ncleos pode ter u desempenho inferior a outro de dois ncleos se o software usado no for otimizado para u a tal (FARIA, 2009).

2.3.1

GPU Computing

Segundo Ikeda (2011) poss que alguns autores utilizem o termo GPGPU para e vel designar o uso de GPUs em programas de propsito geral, entretanto, o termo mais usual o o GPU Computing, caracterizando as GPUs totalmente programveis da ultima geraao. e a c De acordo com Souza (2011), GPU Computing a tcnica de uso da GPU para come e putao de propsito geral atravs de linguagens ou Application Programming Interface ca o e (API) espec cas para alcanar um alto n de paralelismo em determinados aplicativos. c vel 2.3.1.1 CPU vs. GPU

A constante busca por grcos cada vez mais realistas e processamento em tempo real, a as GPUs evolu ram para um patamar de processamento onde existem vrios ncleos para a u execuo de aplicativos altamente paralelos. As CPUs, devido a sua limitaao f ca c sica e consumo de energia, acabaram concentrando seu ciclo evolutivo na adiao de mais ncleos c u de processamento e no na melhoria de um em espec a co (IKEDA, 2011). A gura 2.3 apresenta as diferenas arquiteturais de uma GPU para uma CPU exc pondo a maior quantidade de unidades de processamento existentes na unidade grca, a possibilitando um aumento considervel no poder computacional. Porm, com nmero a e u reduzido de unidades de controle e cache de dados, o uxo de execuao do programa acaba c

10

se tornado limitado.

Figura 2.3: CPU vs. GPU: arquitetura interna

Fonte: adaptado de nVidia (2010b, p.3)

Ikeda (2011) destaca algumas outras diferenas arquiteturais entre uma CPU e uma c GPU: Objetivo: CPUs tem seu ncleo especializado em executar uma unica thread de u funes sequenciais em sua velocidade mxima, j as GPUs so otimizadas para co a a a execuo de milhares de threads paralelamente; ca Multithreading: GPUs podem manter at 1024 threads ncleo de processamento, e u enquanto as CPUs podem executar no mximo de 1 a 2 threads por ncleo. a u

2.4

Taxonomia de Flynn

Segundo Tanenbaum (2006) a taxonomia de computadores paralelos existente ainda uma aproximaao muito grosseira da realidade. e c A tabela 2.1 apresenta a taxonomia de Flynn, uma das mais utilizadas e coerentes existentes. Nela a classicaao feita baseando-se em dois conceitos: c e Fluxos de Instrues : correspondente ao contador de programas em um sistema que co contenha n CPUs com n contadores de programas e conseguintemente, n uxos de instruao; c Fluxos de Dados : correspondente a um conjunto de operandos. Por exemplo, um sensor de temperatura que possui n sensores.

11

Fluxos de Instruoes c 1 1 mltiplas u mltiplas u

Fluxos de Dados 1 mltiplas u 1 mltiplas u

Nome SISD SIMD MISD MIMD

Exemplos Mquina clssica de Von Neumann a a Supercomputador Vetorial Nenhum existente Multiprocessador

Tabela 2.1: Taxonomia de Flynn de acordo com os uxos de instrues e dados co

Fonte: adaptado de Tanenbaum (2006, p.345)

Tanenbaum (2006) explica que para cada tipo de denominao criada por Flynn, existe ca um explicaao lgica com base em seus uxos de dados e instruoes: c o c Single Instruction Single Data (SISD): comparvel ao clssico computador sequna a e cial de Von Neumann, capaz de executar uma unica operaao por vez obtendo um c unico uxo de dados por vez; Single Instruction Multiple Data (SIMD): possuem uma unica unidade de controle que emite um uxo de instruoes por vez mas que pode ser dividido em vrias ALUs c a gerando mltiplos uxos de dados; u Multiple Instruction Single Data (MISD): no est claro que tais mquinas existem, a a a mas sua taxonomia implica em vrias instrues operando sobre um unico dado; a co Multiple Instruction Multiple Data (MIMD): mltiplas CPUs operando de forma inu dependente sobre mltiplos conjuntos de dados, mas que fazem parte de um sistema u maior. Um exemplo seriam os clusters. De acordo com Ikeda (2011) as GPUs enquadram-se na categoria dos dispositivos SIMD, pois partindo de uma unica instruo pode-se obter um nmero signicativo de ca u dados.

2.5

Renderizao de Imagens ca

Conhecido processo na area de processamento de imagens, a renderizaao compreende c uma tcnica em que modelos grcos tridimensionais ou bidimensionais so convertidos e a a em imagens. Neste processo complexo so realizados inmeros clculos sobre os objetos a u a presentes na cena, tais como: textura, cor, reexo, transparncia, posicionamento dos a e pontos de iluminaao, sombras e luzes (SILVA BASTOS SALES, 2008). c

12

Partindo de arquivos que contenham informaoes sobre as primitivas da cena/imagem c a ser gerada, o processo de renderizao inicia lendo os dados de geometria, ponto de ca viso, texturas, iluminaao e shading 5 para ento realizar o processamento, gerando uma a c a imagem ou o raster grco 6 da imagem/cena. a O processo de renderizao tambm pode ser aplicado a objetos tridimensionais, os ca e quais requerem uma maior demanda de processamento.

2.5.1

Renderizao Tridimensional ca

Renderizaao tridimensional pode ser denido como o processo de gerao de imagens c ca atravs de dados tridimensionais dentro de um computador (BIRN, 2002) e A renderizaao tridimensional um processo de criaao que como tirar um fotograa, c e c ao nal produz algum tipo e imagem sendo que neste a diferena que a imagem produzida c e possui efeito de viso tridimensional. a O processo de rederizao tridimensional composto por basicamente dois estgios: ca e a Reection/Scattering e Shading. Em cada estgio so realizadas as seguintes operaoes: a a c Reection/Scattering: deniao de como a luz ir interagir com o objeto partindo c a de um ponto em espec co; Shading: deniao de como iro variar as propriedades de iluminao de um deterc a ca minado material em relao a superf e luz que recebe. ca ` cie

2.5.2

Ray Tracing

Ray Tracing um mtodo de renderizao de iluminaao global, onde feito o traado e e ca c e c dos raios de iluminaao para trs do plano da imagem at os objetos da cena (OWEN, 1999). c a e Aps a realizaao do processo de traado dos raios, os raios so testados em todos o c c a os objetos da cena para determinar se cruzam todos os objetos, se o raio no passar por a nenhum dos objetos ento o pixel sombreado pela cor de fundo da imagem. a e Na gura 2.4 pode-se ver com detalhes como este processo ocorre, desde a passagem do raio para o fundo da imagem, chegando ao objeto da cena at a posiao da cmera em e c a
Processo aplicado durante o desenho de um objeto denindo as reas mais claras e mais escuras em a relao ao ponto de iluminao. ca ca 6 A representao em mapeamento de bits de uma imagem geralmente mostrada por um grid de pixels ca (WIKIPEDIA, 2011d).
5

13

relaao a luz. c

Figura 2.4: Ray Tracing, como funciona

Fonte: Wikipedia (2011e) Silva (2011) dene que um algoritmo bsico de iluminaao por Ray Tracing composto a c e pelas seguintes etapas: Calcular uma linha reta unindo o olho do observador ao ponto de viso; a Descobrir as interseoes desta reta com os objetos tridimensionais que esto atrs c a a da tela; Pintar o ponto com a cor do objeto mais prximo. o Um algoritmo de ray tracing gasta em mdia 75% do tempo de processamento cale culando os pontos de inserao dos raios por envolver clculos matemticos complexos c a a (WHITTED, 1980). Devido ao uso intenso de operaes de ponto utuante, o processamento de iluminaao co c por ray tracing em objetos tridimensionais tem chamado a atenao de pesquisadores da c area de processamento paralelo como GPU Computing.

2.6

Programao Paralela ca

Barney (2011) explica que tradicionalmente o software escrito para execuao serial e c e para ser executado em um unico computador com uma unica CPU.

14

Na gura 2.5 pode-se ver um problema computacional sendo divido em pequenas instruoes que uma-a-uma so processadas serialmente. c a

Figura 2.5: Processamento Serial

Fonte: Barney (2011) Com o advento dos computadores modernos dotados de CPUs multinucleares, foi necessria a criaao de mtodos e formas para que os problemas passem a ser visto de a c e forma paralela e no apenas sequencialmente. a Barney (2011) descreve computaao paralela como sendo uma tcnica onde se faz o c e uso simultneo de recursos computacionais para a resoluao de um problema. A gura a c 2.6 apresenta um cenrio computacional paralelo, com vrios problemas e vrias CPUs a a a para que se possa ento realizar o processamento destes de forma paralelizada. a

Figura 2.6: Processamento Paralelo

Fonte: Barney (2011) A computao paralela segue o paradigma de que o universo paralelo, onde vrios ca e a eventos ocorrem ao mesmo tempo sem que haja uma sequncia entre eles. e A gura 2.7 representa a participaao do processamento paralelo feito atravs de c e supercomputadores em cada segmento de mercado durante o ano de 2011. Areas como

15

indstria e pesquisa so as que mais investem nestes sistemas. u a

Figura 2.7: Segmentos do mercado que mais utilizam computao paralela ca

Fonte: Top500 (2011)

2.7

Compute Unied Device Architecture - CUDA

Tomando como base o poder evolutivo das GPUs, em 2007 a nVidia Corpotation trouxe ao mercado computacional uma nova arquitetura para programao atravs de ca e shaders: o CUDA. Trazendo as GPUs o modelo de programaao paralela de propsito geral, o CUDA c o iniciou um nova arquitetura de programaao atravs de stream processors dispon c e veis nas placas de v deo da srie GeForce 8 (IKEDA, 2011). e Abstraindo a complexidade da arquitetura do dispositivo e baseando-se na linguagem de programaao C como interface de programaao, o CUDA traz aos programadores c c uma viso de que a placa um array de microprocessadores massivamente paralelos a e (RITA BORGO, 2009). Rita Borgo (2009) explica que sua arquitetura de software composta por vrias e a camadas, em termos de API, driver de hardware e bibliotecas de utilidades como pode ser visto na gura 2.8.

16

Figura 2.8: Estrutura de camadas da arquitetura CUDA

Fonte: adaptado de AbiChahla (2008)

2.7.1

Stream Processing

Stream Processing o modelo de programaao no qual se baseia o CUDA. Tambm e c e conhecido como Thread Processing, este modelo como nalidade o processamento de um conjunto uniforme de dados que podem ser operados em paralelo atravs da diviso do e a processamento em kernels (IKEDA, 2011).

2.7.2

C for CUDA

A m de tornar a programao para GPU algo mais amigvel, o modelo de programaca a ao da API baseada em uma extenso da linguagem de programao C (RITA BORGO, c e a ca 2009).

2.7.3

Modelo de Programao em CUDA ca

A estrutura de um programa em CUDA normalmente consiste em duas partes distintas: cdigo a ser executado na CPU e cdigo a ser executado na GPU (SCHETINGER, o o 2009). Neste cenrio de programaao, a CPU passa a ser chamada de host ou processador a c principal e a GPU device ou coprocessador.

17

Utilizando a CPU como um controlador do uxo de execuao, a GPU realiza as opec rao pesadas sobre os dados utilizando um modelo chamado Single Instruction Multiple ca Threads (SIMT) para realizar o processamento de forma totalmente escalar. O programa sempre ser inicializado a partir da CPU e em algum momento ir agregar a a os dados em blocos e pass-los como parmetro para uma funao da GPU (SCHETINGER, a a c 2009). Schetinger (2009) dene que o uxo bsico de execuo de um programa compreende a ca as seguintes etapas: Host inicializa um array com dados; Array copiado da memria do host para a memria da device; e o o Device opera sobre o vetor de dados; O array copiado novamente para o host. e 2.7.3.1 A API CUDA

Para controlar os modelos de threads e memria, um conjunto de comandos e variveis o a de sistema foi criado pela nVidia (MICHAEL ROMERO, 2011). O mais alto n deste controle provido pelos seguintes identicadores: __global__, vel e __host__ e __device__. Sendo: __host__: denota uma funo que executa na CPU. E o tipo de identicador padro ca a e pode fazer tudo que qualquer outra funo escrita em linguagem de programaao ca c C++ possa fazer; __device__: denota uma funo que executa na GPU e que no pode ser invocada ca a pelo host; __global__: identicador utilizado pelas funoes do kernel. Estas funes podem c co ser chamadas do host dentro da device. To importante quanto os identicadores de funo, so as variveis que armazenam a ca a a os indices de execuao das threads. So elas: c a

18

threadIdx: varivel do tipo dim3 7 , utilizada para armazenar as threads dentro a e de um thread block ; blockIdx: varivel do tipo dim3 que armazena os a ndices dos thread blocks dentro da grid. Juntamente com a primitiva __syncthreads() estas variveis so responsveis por a a a garantir a sincronia das threads (MICHAEL ROMERO, 2011). A gura 2.9 representa a sequncia de execuao de um aplicativo escrito para a plae c taforma CUDA. Nela tambm podemos notar a diviso da execuao, onde o cdigo mase a c o sivamente paralelo executa atravs da device e o host se encarrega da execuo do cdigo e ca o sequencial/serial.
7

Um vetor do tipo uint3, utilizado para especicar dimenses na arquitetura CUDA (NVIDIA, 2010b). e o

19

Figura 2.9: Sequencia de execuo do aplicativo entre a devide e o host ca

Fonte: nVidia (2010b, p.13)

20

2.7.3.2

Kernels e hierarquia de Threads

CUDA C estende a possibilidade de criaao de funoes existentes na linguagem C. c c Estas funes so chamadas de kernels e quando invocadas, podem ser executadas paraco a lelamente N vezes por N threads CUDA diferentes (NVIDIA, 2010b). Um kernel denido pela utilizaao do identicador __global__ e durante a sua e c chamada deve-se especicar o numero de threads CUDA que iro executar este kernel a especicando o congurador de execuao <<<gridSize, blockSize>>>. No quadro 2.1 c pode-se ver como feita a chamada de um kernel. e
Quadro 2.1: Exemplo da chamada de um kernel
1 nomeDoKernel <<<gridDim , blockDim>>>(@parametros ) ;

Para cada thread que executa um kernel dado um identicador unico de execuao, e c este ento ca armazenado em um varivel built-in 8 chamada threadIdx. a a Ikeda (2011) arma que este modelo de diviso estimula a viso do problema em dois a a passos: Separar os problemas independentes em formato de grids Dividir o grid em blocos independentes de mesmo tamanho (chamados de thread block ) onde estas threads trabalham de forma cooperativa e compartilham uma memria vis somente entre elas. o vel A gura 2.10, apresenta esta a forma de diviso dos grids em blocks. a
Variveis Built-in so as que especicam o tamanho do bloco e do grid de threads. S utilizadas a a a dentro da device (NVIDIA, 2010b)
8

21

Figura 2.10: Grids de thread blocks do modelo de programao CUDA ca

Fonte: nVidia (2010b, p.9)

2.7.3.3

Hierarquia de Memria o

Existem diferentes n veis de memria dentro de uma GPU, cada uma com uma forma o distinta de leitura e escrita (MICHAEL ROMERO, 2011). A tabela 2.2 apresenta os diferentes tipos de memria presentes em uma device CUDA e seus respectivos mtodos de acesso e o e localizao. ca

22

Memoria Registrador Local Compartilhada Global Constante Textura

on/o chip on o on o o o

Acesso Leitura/Escrita Leitura/Escrita Leitura/Escrita Leitura Leitura

Escopo 1 thread 1 thread Todas as threads + host Todas as threads + host Todas as threads + host

Tempo de Vida thread thread bloco Alocao do host ca Alocao do host ca Alocao do host ca

Leitura/Escrita Todas as threads do bloco

Tabela 2.2: Tipos de memoria presentes no device

(IKEDA, 2011)

2.7.3.4

CUDA Compute Capability

Os principais recursos dispon veis em cada GPU so expostos atravs de um sistema a e padro chamado compute capability, formado por um major number e um minor number a (IKEDA, 2011). Atravs desta numeraao pode-se determinar a reviso do conjunto de instruoes sue c a c portadas pelo dispositivo (NVIDIA, 2010b). A tabela 2.3 apresenta as principais mudanas c em relaao a cada nova verso da compute capability. c a

23

Tabela 2.3: Principais funes suportadas para cada verso de compute capability co a

Fonte: adaptado de Ikeda (2011)

2.7.3.5

Cdigo de Exemplo o

O quadro 2.2 apresenta um aplicativo de exemplo que faz a escrita da frase hello world na saida do console utilizando a API CUDA sobre a liguagem de programaao C++. c

24 Quadro 2.2: Cdigo de um aplicativo do tipo hello world escrito em CUDA. Fonte: Galbraith o (2009)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 } // r e m o n t a o r e s u l t a d o s t r [ i d x ] += i d x ; // d e t e r m i n a em q u a l int thread estamos i d x = b l o c k I d x . x blockDim . x + t h r e a d I d x . x ; // kernel global utilizado na d e v i c e void helloWorld ( char s t r ) { } return 0; // e x i b e na tela str ) ; printf ("%s\n" , // libera a memoria a l o c a d a na d e v i c e cudaFree ( d s t r ) ; // r e c u p e r a os resultados d str , da d e v i c e cudaMemcpy ( s t r , s i z e , cudaMemcpyDeviceToHost ) ; // i n v o c a o k e r n e l h e l l o W o r l d < < dimGrid , < dimBlock >>>( d s t r ) ; // d e f i n e o tamanho da grid e do block por de threads dim3 dimGrid ( 2 ) ; dim3 dimBlock ( 6 ) ; // um b l o c o // uma t h r e a d por palavra caracter // C o p i a a string para a d e v i c e str , s i z e , cudaMemcpyHostToDevice ) ; cudaMemcpy ( d s t r , // A l o c a a memoria no d e v i c e char d s t r ; size t size = sizeof ( str ) ; size ) ; c u d a M a l l o c ( ( v o i d )&d s t r , // S e p r a r o c o n t e u d o da s a i d a for ( i = 0; i < 12; i ++) s t r [ i ] = i ; // S a i d a char desejada World !" ; str [ ] = " Hello // f u n c a o q u e i n t main ( i n t { int i; e x e c u t a r a no h o s t argc , c h a r a r g v ) // D e f i n i c a o da f u n c a o global void helloWorld ( char ) ; #i n c l u d e <cuda . h> #i n c l u d e <s t d i o . h>

25

Ambiente Experimental

O ambiente experimental utilizado baseia-se em ferramentas proprietrias e opena source, uma placa de v deo capaz de executar cdigos da plataforma CUDA e um proceso sador com mltiplos ncleos. u u

3.1

Estrutura F sica

Nesta seo ser apresentada a estrutura f ca a sica utilizada, o hardware empregado no ambiente de testes bem como suas respectivas especicaoes. c

3.1.1

Mquina Utilizada a

O ambiente de testes constitu por uma unica mquina equipada com as seguintes e do a conguraoes: c Placa Me AsRock P67 Extreme6; a Placa de v deo Zotac GeForce GTX580 com clock 1 de 772Mega-hertz (Mhz) e 512 cuda cores de processamento, 1536 Megabytes (MB) de memria Graphics Double o Data Rate (GDDR)5 e capacidade nominal de processamento para operacoes de ponto utuante de 1581.1 Floating-point Operations per Second (GFLOP); 2 Pentes de memria Corsair Vengeance com capacidade de 4 Gigabytes (GB) totao lizando 8 GB; Processador Intel Core i5 2500K, com 4 ncleos de processamento e clock de 3.3Gigau hertz (Ghz) e 6MB de cache n 3; vel
Denominao dada ao sinal oscilante utilizado por dispositivos eletrnicos como mtodo de sincronia ca o e para transmisso de dados. (WIKIPEDIA, 2011a) a
1

26

O uso de uma mquina diferente pode acarretar em diferenas signicativas nos rea c sultados.

3.2

Estrutura Lgica o

Nesta seao sero apresentados os principais softwares e bibliotecas utilizadas na consc a truao dos cenrios para os testes. c a

3.2.1

Sistema Operacional

A linguagem de programaao C++ e a API CUDA so compat c a veis com a maioria dos sistemas operacionais modernos. Neste trabalho ser utilizado um sistema baseado a em Unix, Ubuntu Linux verso 10.04.3 LTS de 64 bits, para a realizaao dos testes. a c

3.2.2

Plataforma CUDA

CUDA uma arquitetura de computaao paralela onde atravs do aproveitamento do e c e poder das GPUs tem-se um aumento expressivo no desempenho computacional. (NVIDIA, 2011c) Neste trabalho ser utilizada a arquitetura CUDA da verso 2.0 por ser a mais nova a a suportada pelo hardware dispon vel. 3.2.2.1 CUDA Toolkit

Kit de ferramentas da plataforma CUDA, nele podem ser encontradas as bibliotecas, compiladores e documentaoes necessrias para a criaao de aplicaes que utilizem a c a c co plataforma CUDA. (NVIDIA, 2011b) Neste trabalho ser utilizada a verso 3.2 do CUDA Toolkit para sistemas de 64 bits. a a

3.2.3

3Ds MAX 2012

O 3Ds Max um ambiente integrado de desenvolvimento para modelagem, animaao e c e renderizaao tridimensional capaz de proporcionar aos seus usurios um experincia de c a e criaao muito agil e rpida. (AUTODESK, 2011) c a

27

Para a execuao dos testes de desempenho entre as plataformas, este trabalho ir c a utilizar um objeto tridimensional criado no 3Ds Max 2012 e exportado para o padro a de arquivo .3ds que reconhecido pela renderer customizada utilizada para comparar as e plataformas GPGPU e em CPU.

3.2.4

Renderer C++

Renderer que utiliza uma implementaao de algoritmos baseado em pol c gonos 3D. Suas principais caracter sticas so a presena de um Raytracer e processamento paralelo a c do clculo de iluminao dos pixels atravs da API Open Multi-Processing (OpenMP)2 a ca e ou Intel Threading Building Blocks (Intel TBB). (TSIODRAS, 2010) Este trabalho utilizar a verso 2.2s da renderer, sendo esta a ultima verso estvel do a a a a projeto. Nela sero executadas as medioes de desempenho referente a CPU multinuclear. a c ` 3.2.4.1 Simple DirectMedia Layer

O Simple DirectMedia Layer (SDL) uma biblioteca multim e dia escrita em linguagem C desenhada para oferecer acesso em baixo n vel ` interaao com teclado, udio, a c a framebuer de v deo 2D, 3D via OpenGL, joysticks e mouse. (LANTINGA, 2011) Este trabalho utilizar como base para geraao dos grcos processados na CPU a a c a biblioteca SDL verso 1.2. a

3.2.5

Renderer CUDA

Uma modicao da renderer escrita na linguagem C++ para a linguagem CUDA ca possibilitando ento o uso de uma GPGPU como processador paralelo para os clculos a a referentes a iluminaao. (TSIODRAS, 2011) c Este trabalho ir utilizar a verso 2.2h desta, que tambm ser utilizada para as a a e a medies de desempenho da plataforma GPGPU. co 3.2.5.1 OpenGL

O OpenGL a biblioteca especicada como padro para escrita de aplicativos que e a utilizem grcos em trs ou duas dimenses, por ser multiplataforma pode ser utilizado a e o
Uma API para oferecer suporte a programao paralela com memria compartilhada em multiplas ca o plataformas atravs das linguagens de programao C/C++ ou Fortran e ca
2

28

em qualquer tido de sistema. E mantido pelo consrcio Khronos Group como uma API o Open-Source. (KHRONOS, 2011b) Para a exibiao das imagens renderizadas pela renderer CUDA ser utilizada a biblic a oteca de grcos tridimensionais OpenGL 1.4. a

3.2.6

Plataforma C++

Nesta seao sero descritas as bibliotecas e compiladores utilizados para a compilao c a ca e execuao da renderer escrita sobre a linguagem C++. c 3.2.6.1 Compilador

O GNU Compiler Collection (GCC), compilador de vrias linguagens produzido pelo a projeto GNU (refere-se ao animal Gnu que tambm o mascote da organizao) e distrie e ca bu pela Free Software Foundation. E um componente essencial para indispensvel para do a sistemas baseados em Unix (como Linux) sendo em algumas distribuioes o compilador c padro do sistema. (WIKIPEDIA, 2011b) a Possui amplo suporte a linguagem de programaao C e atravs de extenses pode-se c e o adicionar suporte a outras linguagens como C++, FORTRAN e JAVA. Ser utilizado para a compilaao da renderer baseada na linguagem C++ o compilador a c GCC de 64 bits verso 4.4.3 com extenses para linguagem C++. a o 3.2.6.2 Intel R Threading Building Blocks

Uma rica API criada pela Intel Corporation para expressar paralelismo em aplicativos programados utilizando a linguagem C++ sem que seja necessrio ser um especialista em a threads. (INTEL, 2011) Neste trabalho ser utilizada a verso 4.0 da biblioteca Intel TBB para sistemas baa a seados em CPUs multinucleares.

29

Implementao ca

Esta seao visa explorar os detalhes da implementaao e realizao dos testes sobre c c ca a plataforma proposta com o objetivo de avaliar o tempo gasto para a renderizao dos ca modelos tridimensionais e a taxa de exibiao das imagens geradas na tela. c

4.1

Descrio do Estudo de Caso ca

O estudo de caso utilizado por este trabalho contempla uma avaliaao do tempo, em c segundos, necessrio para o clculo das intersecoes de raios do ray tracer no modelo a a c tridimensional e a velocidade de apresentao da imagem na tela em FPS. ca Para tais demonstraes foram utilizados trs modelos tridimensionais diferentes. co e Cada modelo apresenta uma complexidade diferente em relaao a quantidade de trinc ` a gulos e vrtices, para este trabalho foram utilizados trs n e e veis de complexidade: baixa, mdia e alta. e Descrio dos modelos: ca Chessboard : um tabuleiro de xadrez. E o modelo mais simples dos trs utilizados e possui 46658 tringulos 32488 vrtices, pode ser visto na gura 4.11; a e Dodge Challenger 2007 : um carro esportivo americano, colorido com preto fosco e vidros verdes. E modelo de complexidade mediana, possui 1067082 tringulos e a 355694 vrtices, pode ser visto na gura 4.12; e Happy : um buda contente. E o modelo mais complexo utilizado nos testes, pois possui 543652 tringulos 1087716 vrtices, pode ser visto na imagem 4.13 a e

30

Figura 4.11: Modelo de complexidade simples, Chessboard

Fonte: Tsiodras (2010)

Figura 4.12: Modelo de complexidade mdia, Dodge Challenger 2007 e

Fonte: Gregrio (2011) o

31

Figura 4.13: Modelo de complexidade alta, Happy

Fonte: Diaz (2011)

4.1.1

Descrio dos Cenrios de Testes ca a

Para os testes de desempenho foram utilizados dois cenrios diferentes para cada a modelo em cada uma das plataformas. Em cada cenrio foi medida a velocidade do a clculo de renderizaao em segundos e a velocidade de exibio da cena quadro-a-quadro a c ca pela quantidade de FPS. 4.1.1.1 Cenrios a

Em ambas as plataformas foram utilizadas os seguintes modos de renderizao para ca os modelos tridimensionais e obtenao dos dados: c Modo 9 : renderizao do modelo tridimensional e exibiao de 60 quadros utilizando ca c efeito de iluminaao por raytracing sem suavizao das bordas com o uso de antic ca aliasing 1 . Modo 0 : renderizao do modelo tridimensional e exibiao de 60 quadros utilizando ca c
Tcnica que permite suavizar os contornos de imagens adicionando pontos de cores intermedirios as e a suas bordas (MORIMOTO, 2006).
1

32

efeitos de iluminao por ray tracing e suavizao de bordas das imagens utilizando ca ca anti-aliasing Morphological Anti Aliasing (MLAA);

4.2

Resultados

Nesta seo sero apresentados os resultados obtidos em cada teste para as plataca a formas GPGPU utilizando CUDA e para a plataforma de CPU multinuclear utilizando a linguagem C++ com paralelismo implementado via TBB em cada um dos modos de renderizaao apresentados. c

4.2.1

Modelo de baixa complexidade, Chessboard

Como pode ser visto na tabela 4.4, a plataforma CUDA foi mais rpida em relaao a a c CPU em ambos os modos de renderizao. ca

Tabela 4.4: Resultados obtidos, modelo de baixa complexidade

Como pode ser visto no grco 4.14, quando no utilizado anti-aliasing a diferena a a c de desempenho no tempo de renderizaao foi de 24.515 segundos, ou seja, a GPGPU c renderizou o modelo tridimensional em 2,38% do tempo levado pela CPU.

33

Figura 4.14: Tempo de renderizao em cada cenrio para o modelo de baixa complexidade ca a

O grco 4.15 apresenta a diferena na taxa de exibio de quadros na tela, tambm a c ca e mais alta quando utilizado o sistema GPGPU.

Figura 4.15: Taxa de FPS para o modelo de baixa complexidade

4.2.2

Modelo de mdia complexidade, Dodge Challenger 2007 e

Com o aumento na complexidade do modelo, houve uma perda considervel de desema penho em ambas a plataformas quando utilizado anti-aliasing, porm o CUDA continua e sendo mais rpido que a CPU multinuclear para renderizaao e exibiao das cenas como a c c

34

mostrado na tabela 4.5.

Tabela 4.5: Resultados obtidos, modelo de mdia complexidade e

O sistema GPGPU realizou o processamento do modelo em modo 0 com apenas 12,24% do tempo gasto pela CPU, como pode ser visto no grco 4.16. a

Figura 4.16: Tempo de renderizao em cada cenrio para o modelo de media complexidade ca a

A taxa de exibiao na tela tambm se manteve mais alta para o sistema GPGPU em c e relaao a CPU, como pode ser visto no grco 4.15. c a

35

Figura 4.17: Taxa de FPS para o modelo de media complexidade

4.2.3

Modelo de alta complexidade, Happy

O modelo de maior complexidade utilizado neste trabalho, com mais de 1 milho a de vrtices. Este modelo foi renderizado com sucesso na CPU multinuclear, entretanto e o sistema GPGPU devido a um limitao no tempo limite de execuo de processos da ca ca plataforma CUDA no conseguiu completar o processamento sem que a maquina utilizada a congelasse. A tabela 4.6 apresenta os resultados obtidos com a CPU, e como pode ser visto, devido a complexidade do modelo foram resultados com valores muito baixos em relaao c aos outros modelos previamente utilizados.

Tabela 4.6: Resultados obtidos, modelo de alta complexidade

36

O grco 4.18 apresenta o tempo gasto para renderizaao do modelo. Se comparado a c ao tempo gasto pela CPU durante a renderizaao do modelo Dodge Challenger, houve c um aumento de mais de 30%.

Figura 4.18: Tempo de renderizao em cada cenrio para o modelo de alta complexidade ca a

Com taxa de FPS abaixo de 1 no modo de renderizao 0, ao alterar a renderizao ca ca para o modo 9 houve um ganho de 0.85 FPS durante a exibiao da imagem, como pode c ser visto no grco 4.19. a

Figura 4.19: Taxa de FPS para o modelo de alta complexidade

37

Consideraes Finais co

Neste cap tulo esto descritos a concluso da pesquisa e trabalhos futuros que se a a possam realizar.

5.1

Problemas Durante os Testes

Durante a realizaao do ultimo teste de desempenho, utilizando o modelo Happy, c o aplicativo de renderizaao que utiliza a API CUDA para paralelismo, no conseguiu c a terminar o processamento das inseres dos raios de iluminao por ray tracing no modelo co ca devido ao processamento ter excedido o tempo mximo de execuo para um placa de a ca v deo em modo compartilhado (modo em que a device alem de realizar o processamento do aplicativo CUDA, realiza o processamento do ambiente grco do sistema operacional) a no Linux. De acordo nVidia (2010a) o CUDA Toolkit 3.2 que foi utilizado neste trabalho, possui uma limitao para GPUs em modo compartilhado, o tempo de execuao mximo para ca c a aplicativos que utilizam a API CUDA limitado a 5 segundos. Este tempo ainda pode e ser acrescido de 1 ou 2 segundos dependendo da capacidade da placa. Levando em conta a utilizaao de uma GTX580, placa mais potente da srie GeForce c e dispon no mercado com apenas uma GPU, os tempos indicados so coerentes, visto vel a que o modelo Dodge Challenger foi processado com sucesso em 6 segundos. Finalizando o ambiente grco atravs do comando /etc/init.d/gdm stop e exea e cutando novamente o aplicativo de renderizaao, foi poss c vel notar que o processo de interseco dos raios foi realizado porm sem o ambiente de exibiao em janelas no foi ca e c a poss exibir a imagem processada nem mensurar os dados de tempo de renderizao e vel ca FPS. Tendo em vista o resultado obtido nalizando o ambiente grco, ca claro que a a utilizaao de uma unica GPU para processamento pesado no poss em ambiente de c a e vel

38

produo, sendo necessria a utilizao de duas GPUs, uma para o processamento do ca a ca ambiente grco e outra para o processamento dos aplicativos CUDA. a

5.2

Concluso a

Este trabalho de concluso de curso apresentou uma comparao de desempenho a ca entre as plataformas GPGPU e CPU multinuclear para processamento paralelo utilizando modelos tridimensionais iluminados por ray tracing nalizando com a realizaao de testes c e apresentaao dos resultados obtidos com base em cada cenrio apresentado. c a Com os testes aqui apresentados foi poss comparar ambas as plataformas e concluir vel que, a plataforma GPGPU se mostrou em mdia 1800% mais rpida que a CPU multie a nuclear para processamentos que envolvem alto paralelismo de dados, entretanto deve-se observar que para um cenrio de produo onde no dever haver paradas por exceder o a ca a a tempo de processamento necessria ` utilizaao de uma placa dedicada para execuao e a a c c dos aplicativos que utilizem API CUDA para paralelismo.

5.3

Trabalhos Futuros

Com base nos resultados obtidos utilizando-se do processamento de uma placa da srie e GeForce, criar um novo estudo de caso utilizando uma placa espec ca para a execuao de c aplicativos CUDA, como por exemplo uma placa da srie Tesla 1 , possivelmente obtendo e melhores resultados em relao aos apresentados. ca

GPUs desenvolvidas para computao de alto desempenho capazes de oferecer at 10x mais velocica e dade para os aplicativos CUDA (NVIDIA, 2011a).

39

Referncias e
ABICHAHLA, F. The CUDA APIs. 2008. Dispon vel em: <http://www.tomshardware.com/reviews/nvidiacudagpu,19546.html>. Acesso em: 21/10/2011. ALVARO CUNO, J. R. M. V. Conceitos de programao em GPU. 2011. Dispon em: ca vel <http://www.visual.pro.br/dl9>. Acesso em: 17/10/2011.

AUTODESK, I. Produtos Autodesk 3ds Max. 2011. Dispon vel em: <http://www.autodesk.com.br/adsk/servlet/pc/index?id=14644213&siteID=1003425&mktvar004= Acesso em: 07/10/2011. BARNEY, B. Introduction to Parallel Computing. 2011. Dispon vel em: <https://computing.llnl.gov/tutorials/parallel comp/>. Acesso em: 20/10/2011. BARTLETT, J. Programming from the Ground Up. [S.l.]: Bartlett Publishing, 2003. BIRN, J. 3D Rendering. 2002. Dispon vel em: <http://www.3drender.com/glossary/3drendering.htm)>. Acesso em: 19/10/2011. BRAIN, M. How Microprocessors Work. 2000. Dispon vel em: <http://computer.howstuworks.com/microprocessor.htm>. Acesso em: 16/10/2011. DAVID B. KIRK, W.-M. W. H. Programando para Processadores Paralelos, Uma Abordagem Prtica ` Programaao de GPU. Rio de Janeiro: Campus / Elsevier, 2010. a a c DIAZ, P. starting point. 2011. Dispon vel em: <http://www.ics.uci.edu/ pablo/les/data/genusnon0/happy.ply>. Acesso em: 28/11/2011. FARIA, A. GPU e CPU o futuro com computao acelerada. 2009. Dispon em: ca vel <http://www.gentena.com.br/materia/Alessandro%20Faria/65/72/>. Acesso em: 16/10/2011. GALBRAITH, B. Hello World using CUDA. 2009. Dispon vel em: <http://forums.nvidia.com/index.php?showtopic=90044>. Acesso em: 21/10/2011. GREGRIO, R. Dodge Challenger 2007. 2011. o GUSMO, F. Introduo ` programao paralela em sistemas heterogneos com OpenCL. a ca a ca e 2010. Dispon em: <http://blogdogusmao.wordpress.com/2010/01/21/introducaovel opencl/>. Acesso em: 16/10/2011. HARDWARE CLUBE do. Verses do DirectX. 2008. Dispon o vel em: <http://www.clubedohardware.com.br/artigos/964>. Acesso em: 17/10/2011.

40

HORSTMANN, C. Padres e Projeto Orientados a Objetos. [S.l.]: Bookmark, 2006. o IKEDA, P. A. Um Estudo do uso Eciente de Programas em Placas Grcas. 2011. a Dispon em: <http://gpubrasil.les.wordpress.com/2011/09/dissertacao-versaovel entregue.pdf>. Acesso em: 18/10/2011. INTEL, C. Intel Threading Building Blocks for OpenSource. 2011. Dispon em: vel <http://threadingbuildingblocks.org/>. Acesso em: 13/10/2011. JOHN D. OWENS MIKE HOUSTON, D. L. S. G. J. E. S. J. C. P. GPU Computing. 2008. Dispon em: <http://cs.utsa.edu/itian/seminar/Spring11/03 04 11/GPU.pdf>. vel q Acesso em: 19/10/2011. KHRONOS, G. OpenCL. 2011. Dispon em: <http://www.khronos.org/opencl/>. vel Acesso em: 13/10/2011. KHRONOS, G. OpenGL. 2011. Dispon em: <http://www.khronos.org/opengl>. vel Acesso em: 13/10/2011. LANTINGA, S. SDL: Simple Directmedia Layer. 2011. Dispon vel em: <http://www.libsdl.org>. Acesso em: 13/10/2011. LIN, C. Fetch, Execute, Decode. 2003. Dispon vel em: <http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/CompOrg/fetchDecode.html>. Acesso em: 09/11/2011. MICHAEL ROMERO, R. U. CUDA Programming. 2011. Dispon vel em: <http://cuda.ce.rit.edu/cuda overview/cuda overview.htm>. Acesso em: 21/10/2011. MORIMOTO, C. E. AntiAliasing. 2006. Dispon vel em: <http://www.hardware.com.br/termos/antialiasing>. Acesso em: 12/11/2011.

NVIDIA, C. CUDA Toolkit 3.2 Release Notes for Linux. 2010. Dispon vel em: <http://developer.download.nvidia.com/compute/cuda/3 2/toolkit/docs/CUDA Toolkit Release N Acesso em: 28/11/2011.

NVIDIA, C. NVIDIA CUDA C Programming Guide v3.2. nVidia Corporation, 2010. Dispon vel em: <http://developer.download.nvidia.com/compute/cuda/3 2/toolkit/docs/CUDA C Programming G Acesso em: 20/10/2011. NVIDIA, C. Computao de Alta Performance. 2011. Dispon ca vel em: <http://www.nvidia.com.br/object/tesla computing solutions br.html>. Acesso em: 28/11/2011. NVIDIA, C. CUDA Downloads. 2011. Dispon vel em: <http://developer.nvidia.com/cudadownloads>. Acesso em: 07/10/2011. NVIDIA, C. What Is CUDA? 2011. Dispon em: <http://developer.nvidia.com/whatvel cuda>. Acesso em: 07/10/2011. OWEN, G. S. Ray Tracing. 1999. Dispon vel em: <http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtrace0.htm>. Acesso em: 19/10/2011.

41

RITA BORGO, K. B. State of the Art Report on GPU Visualization. 2009. Dispon vel em: <http://www.viznet.ac.uk/les/VIZNETWP424LEEDSGPUweb.pdf>. Acesso em: 20/10/2011. SANTEE, A. Programao de Jogos com C++ e DirectX. [S.l.]: Novatec Editora, 2005. ca SCHETINGER, V. CUDA Compute Unied Device Architecture. 2009. Dispon em: vel <http://wwwpet.inf.ufsm.br/periodico/index.php/tutoriais/6mensais/51cudacomputeunieddevicearchitecture>. Acesso em: 20/10/2011. SILVA, F. W. S. V. da. Introduo ao Ray Tracing. 2011. Dispon ca vel em: <http://www.visgraf.impa.br/Data/RefBib/PS PDF/silva94/rt.pdf>. Acesso em: 19/10/2011. SILVA BASTOS SALES, P. da. Avaliao de Desempenho de Ferramentas de ca Renderizao de Imagens em Clusters openMosix e Arquiteturas Multicore. 2008. ca Dispon em: <http://dsc.upe.br/cc/20081/monograaPericlesvf.pdf>. Acesso em: vel t 09/11/2011. SIPAHI, P. D. G. Colquio Computao Heterognea: dos Videogames para a o ca e F sica Computacional. 2009. Dispon vel em: <http://boletim.ifsc.usp.br/TodasNoticias.php?rowid home=1604&rowid vol=80>. Acesso em: 17/10/2011. SOUZA, E. T. T. P. Introduo ` Computao de Alto Desempenho Utilizando GPU. ca a ca 2011. Dispon em: <http://gpubrasil.les.wordpress.com/2011/04/introducaoavel computacaodealtodesempenhoutilizandogpu1.pdf>. Acesso em: 18/10/2011. TANENBAUM, A. S. Organizao Estruturada de Computadores. [S.l.]: Prentice-Hall, ca 2006. TOP500. Segments share for 06/2011. 2011. Dispon vel em: <http://top500.org/charts/list/37/segments>. Acesso em: 20/10/2011. TSIODRAS, D.-I. T. A realtime 3D renderer in OpenMP/TBB. 2010. Dispon em: vel <http://users.softlab.ece.ntua.gr/ ttsiod/renderer.html>. Acesso em: 07/10/2011. TSIODRAS, D.-I. T. A realtime raytracer of triangle meshes in CUDA. 2011. Dispon vel em: <http://users.softlab.ece.ntua.gr/ ttsiod/cudarendererBVH.html>. Acesso em: 07/10/2011. VIANA, J. R. M. Programao em GPU: Passado, Presente e Futuro. 2009. Dispon ca vel em: <http://www.ufpi.br/subsiteFiles/ercemapi/arquivos/les/minicurso/smc1.pdf>. Acesso em: 16/10/2011. WHITTED, T. An Improved Illumination Model for Shaded Display. 1980. Dispon em: vel <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.114.7629&rep=rep1&type=pdf>. Acesso em: 19/10/2011. WIKIPEDIA. Clock Signal. 2011. Dispon vel em: <http://en.wikipedia.org/wiki/Clock signal>. Acesso em: 13/10/2011. WIKIPEDIA. GNU Compiler Collection. 2011. Dispon vel em: <http://pt.wikipedia.org/wiki/GNU Compiler Collection>. Acesso em: 07/10/2011.

42

WIKIPEDIA. Microsoft Direct3D. 2011. Dispon vel em: <http://en.wikipedia.org/wiki/Microsoft Direct3D>. Acesso em: 17/10/2011. WIKIPEDIA. Raster graphics. 2011. Dispon vel em: <http://en.wikipedia.org/wiki/Raster graphics)>. Acesso em: 19/10/2011. WIKIPEDIA. Ray Tracing (graphics). 2011. Dispon vel em: <http://en.wikipedia.org/wiki/Ray tracing (graphics)>. Acesso em: 19/10/2011. ZIBULA, A. General Purpose Computation on Graphics Processing Units (GPGPU) using CUDA. 2009. Dispon vel em: <http://www.wi.unimuenster.de/pi/lehre/ws0910/pppa/papers/gpgpu.pdf>. Acesso em: 19/10/2011.