1.11k likes | 1.25k Views
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.
E N D
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.
EverQuest 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 Warcraft EverQuest 1999 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 NvidiaGeForce 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.
DirectX10 DirectX9
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.
Funcionamento das GPUs Pipeline gráfico
Funcionamento das GPUs • Modelo de Processamento (StreamProcessing) • 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 • Somentealgunscomandosfixosdisponíveis via API • Transformações e Iluminação via API • Texturização via API • Bastante restrito
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 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.
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.
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.
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 Comparação de shaders http://www.youtube.com/watch?v=kRdl4C_6Ydw Vertex e Pixel shaders http://www.youtube.com/watch?v=lA4Z5Eutzp0 Vertex shaders http://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.