GPGPU.

Slides:



Advertisements
Apresentações semelhantes
SISTEMAS OPERACIONAIS
Advertisements

Sistemas Distribuídos
Sistemas Operacionais Aula II
Vitor Fiorotto Astolfi Orientador: Jorge Luiz e Silva
Paralelismo em Máquinas Multiprocessadas
Conceitos de Programação Paralela
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
Sistemas Operacionais
Sistemas Operacionais
Processos e Threads Processos.
Multithreading e multiprocessamento
Recursividade Prof. Alex F. V. Machado
António Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. Machado Computação Gráfica Pipeline Gráfico.
Arquitetura de Sistemas Operacionais
Chapter 4: Threads.
História do Windows XP Significa Windows “eXperience”.
Arquitetura de Computadores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Computing Unified Device Architecture (CUDA)
INTRODUÇÃO À COMPUTAÇÃO
Threads.
Sistemas Operacionais
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Sistemas Operacionais
Unidade 1-1 Processos e Threads
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
PROGRAMAÇÃO ESTRUTURADA II
SISTEMAS OPERACIONAIS
CUDA vs OpenCL Introdução.
Introdução a GPGPU CUDA: arquitetura de computação paralela para GPGPU.
Fundamentos de programação CUDA
Faculdade de Computação Universidade Federal de Mato Grosso do Sul
Algoritmos paralelos eficientes para alguns problemas de processamento de Cadeia de Caracteres Alunos: Diego Alencar dos Santos Melo Felipe Formagini Brant.
Linguagem de Programação IV
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tópicos sobre GPGPU em CUDA
Programação Paralela em OpenCL
César L. B. Silveira Prof. Dr. Luiz G. da Silveira Jr.
Conteúdo Processos e threads Partes do processo
IC - UFF Sistemas Operacionais 4. Threads Texto base: capítulo 4 Operating Systems: Internals and Design Principles W. Stallings.
Vetores e Matrizes Ameliara Freire
Computação de Alto Desempenho Utilizando Placas Gráficas Divino César S. Lucas Universidade Católica de Goiás
Sistemas Operacionais
Sistemas Distribuídos Introdução. Conceito Coleção de múltiplos processos que executam sobre uma coleção de processadores autônomos interligados em uma.
POLIMIG Curso Técnico em Informática Disciplina: Hardware
Computação L1: Infra-Estrutura Básica
Uma Análise das plataformas CUDA e OpenCL usando MetaHeurísticas aplicadas no Problema do Caixeiro Viajante Aluno: Hedley Luna Gois Oriá Disciplina: Introdução.
Capítulo VIII Ambientes de Execução
Sistemas Operacionais
Sistemas Operacionais
Capítulo 5 Entrada/Saída 5.1 Princípios do hardware de E/S
Processos.
Back-End Compilação aula-11-back-end.pdf.
Capítulo 4: Processos.
Perspectivas NVidia para Desktop Tiago Carneiro Pessoa
Algoritmos e Programação MC102
Estrutura de Interconexão
Programação Paralela em Ambientes Computacionais Heterogêneos com OpenCL César L. B. Silveira Prof. Dr. Luiz G. da Silveira Jr. Prof. Dr. Gerson Geraldo.
Disciplina: Sistema Operacional Professor: Luciano Ricardi Scorsin.
Capítulo 2 Processos e Threads 2.1 Processos 2.2 Threads
Projetar Processos. Copyright © 2002 Qualiti. Todos os direitos reservados. Qualiti Software Processes Projetar distribuição | 2 Descrição do Projeto.
Linguagem de Programação
Capítulo 5 Entrada/Saída 5.1 Princípios do hardware de E/S
Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot Bruno Pereira dos Santos Dany Sanchez Dominguez Universidade Estadual de Santa.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Bruna Cavallero Martins Universidade Católica de Pelotas.
Anderson Braga de Avila 1.  Usar todos os recursos computacionais no sistema — CPUs, GPUs e outros processadores  Modelo de programação paralela eficiente.
OpenCL Eliane Siegert. Estrutura – Princípio Geral de Funcionamento – Exemplos de Aplicações – Modelo de Programação – Linguagens Suportadas – Exemplos.
Introdução a GPU e CUDA.
Transcrição da apresentação:

GPGPU

GPU

GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?

GPGPU – a evolução ... Há 3 fases históricas das GPUs: Fixed Function GPU Programmable GPU Arquitetura Unificada

Fixed Function GPUs Arquitetura incapaz de aceitar programação Impossível realizar cálculos sem ser de computação gráfica Incapacidade de acesso ao processador Conceito de APIs

Fixed Function GPUs Processador(es) CPU Back Buffer Engine de Geometria Engines de Rasterização d e v í o M e m ó r i a Front Buffer Back Buffers Interface CPU - GPU Front Buffer Z Buffer Stencil Buffer CPU Texture Buffer Interface GPU - Video

Programmable GPU Vertex and Pixel Shaders Arquitetura orientada a estrutura de dados de computação gráfica

Programmable GPU

Programmable GPU

Arquitetura Unificada - CUDA

Programmable GPU Limitações: Shaders Modo de endereçamento limitado Pequeno grupo de instruções Dificuldade de comunicação entre processadores e processos

GPGPU Problema de ter que mapear tudo para APIs Usar funções OpenGL ou DirectX para efetuar todo tipo de operações

Arquitetura Unificada - CUDA

Arquitetura Unificada - CUDA Paralelismo sem esforço, baixo custo...

Por que mais rápido? Tarefa 100 vezes mais rápido Tarefa de 1 ano de duração cai para 3 dias Tarefa de 1 dia cai para 15 minutos Tarefa de 3 segundos cai para 30 vezes por segundo

Exemplo: Simulação de Multidão

GPU Operações aritiméticas ++ Operações de memória --

Threads Porque programar em Threads? Para fazer distribuição de carga em arquitetura single core Para fazer distribuição de carga entre múltiplos núcleos Desafio de ter que manter o máximo de uso de cada núcleo

Threads Quantas threads voce já criou para seu programa?

Threads CUDA permite até 12 mil threads CUDA é basicamente um cluster de threads

Threads – Custo de gerenciamento Em CPU, como fazemos pouca troca de threads, podemos achar natural gastar 1000 instruções para fazer a troca de uma thread para outra. Em CUDA há outro paradigma.... Não é necessário gerenciar as threads, a priori. Sincronismo deve ser explicito

Modelo de Programação CUDA estende a linguagem C através de kernels Kernels equivalem a funções, que serão executadas N vezes em paralelo N é o número de threads

Arquitetura do Software

Funções em CUDA Não pode haver recursão no __device__ Sem variáveis estáticas Sem numero variável de parâmetros A chamada do kernel é assíncrona Sincronismo deve ser feito explicitamente __device__ __host__ : podem ser usados juntos

Limite de banda de memória Importância do reuso de dados

Threads, Blocos e Grids Um kernel corresponde a um grid de Blocos Cada Bloco é composto por threads Todas as threads compartilham a mesma área de memória As threads de um mesmo bloco podem compartilhar umas com as outras Threads de blocos diferentes não podem compartilhar memória entre si

Threads, Blocos e Grids - memórias

Palavras reservadas

Hierarquia de Threads Todos os threads de um bloco usam da mesma memória compartilhada. O número de threads num bloco é limitado pela memória: GPUs atuais possuem até 512 threads.

Funções em CUDA __ global__ void KernelFunction (...) dim3 DimGrid (100, 10); // Grid com 1000 blocos dim3 DimBlock (4, 8, 8); // Cada bloco tem 256 threads Size_t SharedMemBytes = 32 KernelFun << DimGrid, DimBlock, SharedMemBytes>> (...);

Kernel – será compilado para a GPU // Kernel definition __global__ void vecAdd(float* A, float* B, float* C) { } int main() // Kernel invocation vecAdd<<<1, N>>>(A, B, C); __global  define que é um kernel

kernel __global__ void vecAdd(float* A, float* B, float* C) { int i = threadIdx.x; C[i] = A[i] + B[i]; } int main() vecAdd<<<1, N>>>(A, B, C); threadIdx  define um ID de um dos threads << n, m>>  numero de blocos (n) e threads (m) solicitados para o kernel

Hierarquia de Threads threadIdx é um vetor de 3 componentes Threads podem ser identificados com índices de 1, 2 ou 3 dimensões (formando thread blocks de uma, duas ou três dimensões) Índice de uma thread: Se for um bloco 1D: é a mesma coisa Se for um bloco 2D (Dx, Dy): threadId de um thread de índice (x, y) é x + yDx Se for um bloco 3D (Dx, Dy, Dz): threadId de uma thread de índice (x, y, z) é x + yDx + zDxDy

Primeiro exemplo de programa cudaMalloc  aloca espaço de memória global da GPU

Primeiro exemplo de programa

kernel Como faria para somar uma Matriz?

As GPUs vão desaparecer...