logo “ add your company slogan ” gpgpu: opencl, cuda e shaders introdução à multimídia –...

Post on 07-Apr-2016

231 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

LOGO

“ Add your company slogan ”

GPGPU: OpenCL, CUDA e Shaders

Introdução à Multimídia – CIn - UFPE

Equipe

Aline Éllida D’Oleron Vasconcelos Ângelo Lima Mazer Luiz Gustavo da Rocha Charamba Márcio Ricardo Alves Gadelha de Araújo Sílvio Gustavo de Oliveira Santos

Graduação em Engenharia da Computação

Roteiro Aline:

O que é GPGPU(Introdução) GPU(Visão geral) História e Evolução Macro arquitetura Frameworks(CUDA, OpenCL, Shaders)

Sílvio: Shaders

Charamba: Cuda

Márcio: OpenCL

Ângelo: Relacionar aplicações com RV e RA Aplicações Tendências Futuras Conclusão

GPGPU

• O que é GPGPU ?

• Uma Visão geral sobre GPU

• História e Evolução

• Evolução do processamento das GPUs

• Funcionamento das GPUs

• Linguagens

O que é GPGPU?

General Purpose Graphics Processing Unit(Unidade de Processamento Gráfico para Propósito Geral)

Alta velocidade GPGPU é uma técnica de usar uma GPU,

que normalmente lida apenas com computação gráfica, para realizar computação em aplicações tradicionalmente tratadas pela CPU.

Uma visão geral sobre GPU

Reduzir a carga geral da CPU Maior velocidade Imagens com maior qualidade. Efetuar complexos cálculos matemáticos e

geométricos Capacidade de processar vetores e

matrizes com facilidade.

História e Evolução

Antes da criação das GPUs, as aplicações gráficas (em especial os jogos) eram baseados apenas em polígonos ou seja, na geometria da cena.

História e Evolução

Placas Aceleradoras 1995: Primeira placa gráfica comercial:

3dxf voodoo Mapeamento de texturas geométricas

1999: Placas aceleradoras 3D GeForce 256 (NVidia) Criação do conceito de pipeline gráfico Transformação dos vértices dos polígonos e

pela iluminação dos mesmos.

EverQuest 

                                                                                                                                                                                         

EverQuest 

                                                                                                                                                                                         

EverQuest 1999 

Warcraft 

                                                                                                                                                                                         

Warcraft

1994

História e Evolução

2001: placas gráficas programáveis GeForce 3, GeForce 4 e Radeon 8500. A programação só era possível no

processador de vértices. Tinha diversas limitações quanto a sua

funcionalidade. Criado o conceito de texturas 3D.

Max Payne 

                                                                                                                                                                                         

Max Payne 

2001

História e Evolução

2002: o processador de fragmentos também se tornou programável. GeForce FX, Radeon 9600-9800 e Radeon

X600-800 Faziam computação muito mais eficiente e

flexível do que a geração anterior.

Warcraft III 2001

História e Evolução

Atualmente: DirectX 10. A Nvidia GeForce 8 e a ATI Radeon HD2900

implementaram uma nova arquitetura:• o estágio de vértices, o novo estágio de geometria

e o estágio de fragmentos.

DirectX9

DirectX10

Evolução do processamento das GPUs

Ilustrando o poder desta evolução temos que o número de operações de ponto flutuante destes processadores, quando comparados com os processadores de propósito geral do mercado, cresce mais rápido ao longo dos anos.

Evolução do processamento da s GPUs

Funcionamento das GPUs

Pipeline gráfico

Funcionamento das GPUs

Modelo de Processamento (Stream Processing) pode processar uma maior variedade de

dados e com maior paralelismo.

Linguagens

CUDA : Arquitetura de computação paralela da NVIDIA que possibilita aumentos significativos na performance de computação pelo aproveitamento da potência da GPU.

Linguagens

OpenCL: (Linguagem de Computação Aberta) é um novo ambiente computacional multiplataforma. Ela permite que os desenvolvedores aproveitem o grande poder da computação paralela das GPUs para criar poderosas aplicações de computação.

Shaders

• O que são shaders?

• Pipeline fixo

• Pipeline programável

• Linguagens

• Exemplos

O que são shaders?

São programas que rodam na GPU e que determinam como um objeto será renderizado.

O que são shaders?

Antes dos shaders, a GPU oferecia somente um conjunto de efeitos pré-programado de efeitos. Efeitos de luz, perspectiva, textura... Gráficos pouco realistas

A partir da criação dos shaders, foi possível criar efeitos que aumentam o realismo das cenas 3D

Suportado a partir do DirectX 8 e OpenGL 1.4

Pipeline Fixo

Somente alguns comandos fixos disponíveis via API Transformações e Iluminação via API Texturização via API

Bastante restrito

Pipeline Fixo

Pipeline Programável

Código customizável escrito pelo programador e executado pela GPU.

Necessário definir as transformações de cor e textura.

Permite materias mais realistas (metais, pedra, madeira)

Pipeline Programável

Pipeline Programável

As GPUs atuais permitem programar 3 tipos de shaders:

Vertex shaders Geometry shaders Pixel shaders

Vertex Shader

Programa que opera sobre os vértices e sobre os dados associados (cor, iluminação, textura).

O programa é executado uma vez para cada vértice, sem informações sobre os demais vértices.

Vertex Shader

O processador de vértices executa o shader, que pode realizar as seguintes operações sobre os vértices: Transformações de posição Transformações de textura Transformações de iluminação

Para cada vértice de entrada, gera um único vértice de saída.

Vertex Shader

Geometry Shader

Programa que opera sobre as primitivas (pontos, linhas e triângulos).

Permite que novos vértices sejam adicionados ou removidos, alterando o número de primitivas.

Geometry Shader

Deste modo, é responsável pelo nível de detalhe do objeto.

A partir de cada primitiva de entrada, gera uma ou mais primitivas de saída.

Geometry Shader

Pixel Shader

Programa executado sobre todos os pixels que compõem uma primitiva.

É executado uma vez para cada pixel que compõe a primitiva.

Pixel Shader

Alguns operações possíveis que o processador de pixels pode executar: Determinar cores dos pixels Coordenadas de textura Iluminação e sombras

Não pode alterar posições dos pixels.

Pixel Shader

Linguagens

RenderMan Shading Language Criada no final da década de 80 Uma das primeiras linguagens para criação

de shaders Permitiu que parte do pipeline gráfico fosse

substituído por pequenos programas (shaders)

Não é destinado a renderização em tempo real

Linguagens

HLSL – High Level Shading Language Linguagem proprietária da Microsoft Usada pra desenvolver com Direct3D

GLSL – OpenGL Shading Language Usada para criar shaders em OpenGL Multi-plataforma

Cg – C for Graphics Dsenvolvida pela Nvidia em conjunto com a MS Similar a HLSL

Shaders - Exemplos

Jogos sem shaders

Jogos com shaders

Shaders - Exemplos

Shaders - Exemplos

Comparação de shadershttp://www.youtube.com/watch?v=kRdl4C_6Ydw

Vertex e Pixel shadershttp://www.youtube.com/watch?v=lA4Z5Eutzp0

Vertex shadershttp://www.youtube.com/watch?v=KkccB1OvQjs

CUDA

• O que é CUDA?

• Arquitetura CUDA

• API CUDA

• Usando CUDA

• Aplicações com CUDA

O que é CUDA?

CUDA (Compute Unified Device Architecture )

CUDA é um modelo de programação paralela e um ambiente de software projetado para desenvolver aplicações que utilizam de forma eficiente o número de cores disponíveis no sistema.Tudo isso de forma escalável e transparente.

Tecnologia NVIDIA.

Arquitetura CUDA

CUDA é composta de três abstrações principais.

Arquitetura CUDA

CUDA é composta de três abstrações principais. Uma hierarquia de grupo de threads;

Arquitetura CUDA

CUDA é composta de três abstrações principais. Uma hierarquia de grupo de threads; Memórias compartilhadas;

Arquitetura CUDA

CUDA é composta de três abstrações principais. Uma hierarquia de grupo de threads; Memórias compartilhadas; Sincronização via barreiras.

Arquitetura CUDA

CUDA é composta de três abstrações principais. Uma hierarquia de grupo de threads; Memórias compartilhadas; Sincronização via barreiras.

Estas abstrações possibilitam o paralelismo de dados e threads. O programador particiona o problema em subproblemas que podem ser solucionados independentemente em paralelo. Cada subproblema pode ser agendado para ser executado em qualquer um dos núcleos disponíveis, apenas o sistema de runtime precisa saber quantos núcleos estão disponíveis.

Arquitetura CUDA

Hierarquia de memória Comparativo entre CPU e GPU. Um mesmo trecho de código é executadoem paralelo para diferentes blocos de dados e com uma cache para cada núcleo da GPU.

Arquitetura CUDA

Hierarquia de memória Comparativo entre CPU e GPU. Um mesmo trecho de código é executadoem paralelo para diferentes blocos de dados e com uma cache para cada núcleo da GPU.

Estas pequenas cachespossuem acesso rápido para leitura e escrita, permitindo o compartilhamento detarefas entre as threads.Reduzindo o acesso a memórias externas, diminuindo a latência.

API CUDA

A pilha de software do CUDA, envolve uma API com suporte direto adiversas funcões matemáticas, primitivas de computação gráfica, bibliotecas, suporte aoruntime e ao driver, que otimiza e gerencia a utilização de recursos diretamente com aGPU.

API

API CUDA

Bibliotecas de Runtime. Tem a função de gerenciar operações da

CPU em comunicação com GPU. Gerencia núcleos disponíveis na GPU.

Funções para CPU:

- Gerenciamento:- GPU- Memória- Controle de tempo de

execução- Interoperabilidade entre

OpenGL e Direct3D

Bibliotecas de Runtime. Tem a função de gerenciar operações da

CPU em comunicação com GPU. Gerencia núcleos disponíveis na GPU.

API CUDA

Funções para CPU:

- Gerenciamento:- GPU- Memória- Controle de tempo de

execução- Interoperabilidade entre

OpenGL e Direct3D

Bibliotecas de Runtime. Tem a função de gerenciar operações da

CPU em comunicação com GPU. Gerencia núcleos disponíveis na GPU.

API CUDA

Funções para GPU:

- Matemáticas Otimizadas

- Sincronização das Threads

- Texturas- Funções para

garantir atomicidade

Usando CUDA

Requisitos para a utilização Placas Gráficas: NVIDIA GeForce série

8 ou superior

Usando CUDA

Requisitos para a utilização Placas Gráficas: NVIDIA GeForce série

8 ou superior

NVIDIA Quadro

Usando CUDA

Requisitos para a utilização Placas Gráficas: NVIDIA GeForce série

8 ou superior

NVIDIA Quadro

NVIDIA Tesla

Usando CUDA

Requisitos para a utilização Placas Gráficas:

Linguagens:• C • C ++ (futuramente)• FORTRAN (futuramente)• Java, FORTRAN e Python (feito por terceiros)

NVIDIA GeForce série 8 ou superior

NVIDIA Quadro

NVIDIA Tesla

Aplicações com CUDA

Várias aplicações com CUDA NVIDIA CUDA Day Demos - Feb. 2010, San

Francisco• http://www.youtube.com/watch?v=ZOGLkl9cFPw&f

eature=fvw

Simulação de Partículas em tempo real NVIDIA CUDA realtime particles demo

• http://www.youtube.com/watch?v=RqduA7myZok

OpenCL

• O que é OpenCL?• Working Group

• OpenCL 1.1

• Processor Parallelism• It’s a heterogeneous World

• Arquitetura OpenCL

• OpenCL At Work

• Timeline

• Models

• Programming Kernels• Summary

• Exemplos

O que é OpenCL?

OpenCL (Open Computing Language) é uma linguagem de programação para computadores para uso geral de programação paralela de sistemas heterogêneos.

A linguagem é aberta, livre de royalties e visa ser multi-plataforma.

Ela consiste numa API para coordenar a computação paralela.

O que é OpenCL?

OpenCL proporciona um ambiente de programação uniforme para os desenvolvedores de software para escrever código eficiente e portátil para computação de alto desempenho, servidores, sistemas de computadores desktop e dispositivos móveis através de um diversificado mix de multi-core CPUs, GPUs, Cells e DSPs.

OpenCL Working Group

Diversa participação da indústria Ex: Fornecedores de processadores,

fabricantes de sistema, desenvolvedores de aplicativos

Muitos especialistas líderes da indústria envolvidos no projeto OpenCL

Apple fez a proposta inicial e é muito ativa no grupo de trabalho

OpenCL Working Group

OpenCL Timeline

Inicialmente desenvolvida pela Apple Apple submeteu proposta inicial ao

Khronos Group Aprovada como release pública

OpenCL 1.1

Período de 18 meses entre OpenCL 1.0 e OpenCL 1.1 Totalmente compatível com OpenCL 1.0 Novos tipos de dados Incluindo 3 componentes de vetores e

formatos de imagem adicionais Comandos de manipulação de vários

hospedeiros Buffers de processamento em vários

dispositivos

OpenCL 1.1

Operações em regiões de um buffer Incluindo ler, escrever e cópia do 1D, 2D ou 3D

regiões retangulares Uma maior utilização de eventos Para dirigir e controlar a execução de comandos Adicional OpenCL C built-in funções Melhoria da interoperabilidade OpenGL Partilha eficiente de imagens e buffers ligando

eventos OpenCL e OpenGL

Processor Parallelism

It’s a Heterogeneous World

A modern platform Includes: One or more CPUs One or more GPUs DSP processors other?

OpenCL lets Programmers write a single portable program that uses ALL resources in the heterogeneous platform.

Arquitetura OpenCL

OpenCL API

Functions that allow an application to manage parallel computing tasks

It enumerates the OpenCL-capable hardware in a system

sets up the sharing of data structures between the application and OpenCL

controls the compilation and submission of kernels to the GPU

and has a rich set of functions that manage queuing and synchronization

OpenCL Runtime

Executes tasks submitted by the application via the OpenCL API

The runtime efficiently transfers data between main memory and the dedicated VRAM used by the GPU, and directs execution of the kernels on the GPU hardware

During execution, manages the in-order or out-of-order dependencies between the kernels, and utilizes the GPU’s processing elements in the most efficient manner

OpenCL at Work

At startup, the application calls the OpenCL API to determine which GPUs are available in the system. It then selects the appropriate GPUs and creates command queues. The application loads and compiles the OpenCL C kernels it will use.

OpenCL at Work

When the application is ready to execute a kernel, it calls the OpenCL API to specify the data and the number of parallel kernel instances required.

The OpenCL runtime moves the data required by the kernel up to the GPU’s VRAM. The GPU then executes the kernel simultaneously on its processing elements.

OpenCL Platform Model

One Host + one or more Compute Devices Each Compute Device is composed of one or more

Compute Units• Each Compute Unit is further divided into one or more

Processing Elements

OpenCL Execution Model An OpenCL application runs on a host which

submits work to the compute devices Work item: the basic unit of work on an OpenCL device Kernel: the code for a work item. Basically a C function Program: Collection of kernels and other functions

(Analogous to a dynamic library) Context: The environment within which workitems executes

… includes devices and their memories and command queues

Applications queue kernel execution instances Queued in-order … one queue to a device Executed in-order or out-of-order

OpenCL Memory Model

Private Memory Per work-item

Local Memory Shared within a workgroup

Global/Constant Memory Visible to all workgroups

Host Memory On the CPU

Programming kernels: OpenCL C Language

A subset of ISO C99 But without some C99 features such as standard C99 headers,

function pointers, recursion, variable length arrays, and bit fields

A superset of ISO C99 with additions for: Work-items and workgroups Vector types Synchronization Address space qualifiers

Also includes a large set of built-in functions Image manipulation Work-item manipulation, Specialized math routines, etc.

Programming Kernels: Data Types

Scalar data types char , uchar, short, ushort, int, uint, long, ulong,

float bool, intptr_t, ptrdiff_t, size_t, uintptr_t, void, half

(storage) Image types

image2d_t, image3d_t, sampler_t Vector data types

Vector lengths 2, 4, 8, & 16 (char2, ushort4, int8, float16, double2, …)

Vector operations

Building Program Objects

The program object encapsulates: A context The program source/binary List of target devices and build options

OpenCL Synch: Queues & Events

Events can be used to synchronize kernel executions between queues

Example: 2 queues with 2 devices

OpenCL Summary

OpenCL vs CUDA

OpenCL Plataforma heterogênea (GPUs Nvidia, ATI

Radeon; CPU Intel). Não tira o máximo aproveitamento do

hardware, como CUDA tira numa GPU Nvidia. Freeware. Possui suporte Nvidia.

CUDA Plataforma homogênea (Apenas GPUs

Nvidia). Expõe uma rápida memória compartilhada

que podem ser compartilhados entre threads. Tecnologia mais madura, possui mais

recursos. Possui suporte Nvidia.

Exemplos

Apple Mac OS X Snow Leopard já vem com o OpenCL

http://www.youtube.com/watch?v=r1sN1ELJfNo http://www.youtube.com/watch?v=IEWGTpsFtt8 http://www.youtube.com/watch?v=33rU1axSKhQ http://www.youtube.com/watch?v=7PAiCinmP9Y http://www.youtube.com/watch?v=-GeB1HOt_U0 http://www.youtube.com/watch?v=8z2zDwzK5Kg

Aplicações

• Finanças

• CAD/CAM/CAE

• Dinâmica de fluidos

• Filmes e Entretenimento

• Serviços de informação geográfica (GIS)

• Imaging

• Gás e Petróleo

• Clusters

Finanças

• mercado de alto risco

• algorítmos complexos modelam o mercado e ajudam os negociadores e investidores a tomarem decisão

• Monte Carlo• Avalia inúmeras variáveis como taxa de juros,

preços de commodity etc.• Consome muito tempo

Finanças

• SciFinancial – desenvolvido por SciComp

• Software que gera código C/C++ de espeficicações de modelos em alto nível

• Código compilável para GPU• faz uso da sua capacidade de paralelização • ganho de velocidade variando entre 30 e 100 vezes

com uma NVIDIA Tesla C1060 GPU• Velocidade aumenta aproximadamente linearmente com

o aumento do número de GPUs

Solução com GPU

CAD/CAM/CAE

• Tradicionalmente, designers criam amostras reais para prototipar e mostrar para investidores

• Processo caro e demorado

• OptiTex moderniza o processo tradicional usando uma engine 3D própria

• Permite simular o visual e o movimento das peças em modelos virtuais • São Paulo Fashion week Virtual ?

CAD/CAM/CAE

Solução com GPU

• 190 dias eram nesecessários no desenvolvimento de um produto

• 35 dias são nescessários atualmente após reconstrução de sua engine usando GPU

Dinâmica de fluidos

• National Center for Atmospheric Research (NCAR) desenvolveu um modelo de previsão de tempo bastante sofisticado• Aplicações saindo da escala dos Terabytes para a dos Petabytes

• Crescendo além dos clusters convencionais

Dinâmica de fluidos

Solução com GPU

• portaram o modelo para CUDA

• ganho de 10X em calculos de microfísica ( < 1% do código )

• aumento em 20% da velocidade do modelo em geral

Filmes e Entretenimento

• Weta digital ficou responsável por criar sequências com 800 “CGs characters”

• Quantidade de poligonos medidos em bilhões no lugar dos milhões

Filmes e Entretenimento

• Weta e NVIDIA criaram uma engine chamada PentaRay

• Alcançaram um ganho de velocidade de 25X depois de portarem a engine para CUDA

• NVIDIA Tesla® S1070

Solução com GPU

GIS

• Planejadores usam aplicações GIS para:• mapear informações de localização• dados demográficos• população• layout das ruas e avenidas• etc

• Conjunto de dados não para de crescer. Gigabytes de:• mapas interativos• camadas de superfície• imagens

GIS

• Menifold.net converteu seu Software para CUDA

• Programas que rodavam em 20 minutos rodam em 30 segundos

Solução com GPU

• Programas que rodavam em 30 – 40 segundos rodam em tempo real

Imaging

• Professor Hongen Liao desenvolveu uma maneira de projetar obejtos 3D no ar ( Integral Videography )

• Em 2001:• 10 segundos para gerar um único frame com um pentium 3 a 800MHz• 5 fps usando UltraSPARC III 900 MHz

• Não era rápido o suficiente...

Imaging

• Teste em uma GeForce® 8800 GTX geraram 13 – 14 fps

• CUDA foi usada como Plataforma de desenvolvimento

Solução com GPU

Gás e Petróleo

• Custo de perfurações são muito altos

• Modelagens 3D são utilizadas para achar lugares potenciais

• O cluster da SeismicCity precisaria de 20.000 CPUS para rodar seu algoritmo

Gás e Petróleo

• Porte para NVIDIA® Tesla™ S870 resultou em ganho de 20X na performance

• Solução com CUDA permite usar novos códigos mais rapidamente e com menor custo

Solução com GPU

Clusters

• NCSA desenvolveu código open source ( HOOMD-blue )• código para dinâmica molecular

Clusters

• Simulação, em GPU, roda na mesma velocidade que nos 128 CPUs de um Cray XT3

Solução com GPU

Futuro

• cGPU• Cores agrupados em 32 unidades• 16 grupos • 512 cores no total• GDDR5

Futuro

• Hardware Thread Schedule (HTS)• trata o escalonamento para o programador

Futuro

Conclusão

• Alto poder de paralelização

• Multidiciplinar

• Capacidade de realizar muitos cálculos de ponto flutuante

• Suporte à várias bibliotecas

Dúvidas

?

Referências• http://www.verlab.dcc.ufmg.br/_media/cursos/arquitetura/2007-1/grupo3/seminario_gru

po3.pdf• http://www.uri.com.br/~adario/disciplinas/AC2/files/Artigo%20GPU.pdf• http://www.tupinihon.com/tech/pdf/artigo-gpu.pdf• http://www.nvidia.com.br/• http://en.wikipedia.org/wiki/HLSL• http://en.wikipedia.org/wiki/OpenGL_Shading_Language• http://en.wikipedia.org/wiki/Cg_(programming_language)• http://www.davidcornette.com/glsl/intro.html• http://www.lighthouse3d.com/opengl/glsl/index.php?intro• http://devtuts.com.br/wp/2010/04/introducao-completa-aos-shaders/• http://desenvolvimentodejogos.wikidot.com/shaders• http://www.gdhpress.com.br/blog/shaders/• Computacão de alto desempenho utilizando CUDA• Bruno Cardoso Lopes, Rodolfo Jardim de Azevedo• URL: www.brunocardoso.cc/cuda/cuda.pdf• Blog do John Tortugo• URL: http://johntortugo.wordpress.com/2008/12/30/cuda-modelo-de-programacao-para

lela/

Referências• http://www.verlab.dcc.ufmg.br/_media/cursos/arquitetura/2007-• http://www.khronos.org/opencl/• http://www.khronos.org/developers/library/overview/opencl_overview.pdf• http://www.gdhpress.com.br/blog/opencl/• http://www.guiadohardware.net/noticias/2008-12/493F5D72.html• http://www.guiadohardware.net/noticias/2010-06/opencl.html• http://pt.wikipedia.org/wiki/OpenCL• http://developer.nvidia.com/object/opencl.html• http://developer.download.nvidia.com/OpenCL/NVIDIA_OpenCL_JumpStart_Guide.pdf• http://www.nvidia.com/object/cuda_opencl_new.html• http://www.nvidia.com.br/object/cuda_opencl_br.html• http://images.apple.com/br/macosx/technology/docs/OpenCL_TB_brief_20090608.pdf

top related