Dissertação de Mestrado: Um estudo do uso eficiente de programas em placas gráficas

Título:

Um estudo do uso eficiente de programas em placas gráficas

Autora:

Patricia Akemi Ikeda
Mestrado em Ciência da Computação
Instituto de Matemática e Estatística
Universidade de São Paulo

Resumo:

Inicialmente projetadas para processamento de gráficos, as placas gráficas
(GPUs) evoluíram para um coprocessador paralelo de propósito geral de alto
desempenho. Devido ao enorme potencial que oferecem para as diversas áreas
de pesquisa e comerciais, a fabricante NVIDIA destaca-se pelo pioneirismo
ao lançar a arquitetura CUDA (compatível com várias de suas placas), um
ambiente capaz de tirar proveito do poder computacional aliado à maior facilidade
de programação.
Na tentativa de aproveitar toda a capacidade da GPU, algumas práticas
devem ser seguidas. Uma delas consiste em manter o hardware o mais ocupado
possível. Este trabalho propõe uma ferramenta prática e extensível que
auxilie o programador a escolher a melhor configuração para que este objetivo
seja alcançado.

Material:

Slides apresentação
Dissertação

Seminário USP: Wrapper code generation for easy implementation of video processing operators

USPTítulo: Wrapper code generation for easy implementation of video processing
operators
Palestrante: Daniel Oliveira Dantas
Doutor em Ciência da Computação – DCC-IME-USP

Biografia do palestrante:
Daniel tem Doutorado, Mestrado e Bacharelado em Ciência da Computação pelo
IME-USP. O foco de seu trabalho é em processamento de imagens. Trabalhou com
processamento de imagens de microarray durante o mestrado. Durante o doutorado,
trabalhou com processamento de vídeo em tempo real, usando GPU para acelerar o
processamento.

Resumo:

No seminário será apresentado o artigo “Automatic generation of wrapper code for
video processing functions”. O processamento de vídeo com GPU’s requer o uso de
uma API como OpenGL ou CUDA. Avanços recentes são bibliotecas como GPUCV e
OpenVidia, com operadores rápidos que aproveitam o poder de processamento das
GPU mas escondem do usuário a complexidade na sua programação. Porém, a
implementação de novos operadores nessas bibliotecas não é tão simples quanto
possível e em GPUCV é limitada por algumas templates embutidas na biblioteca. O
artigo descreve um gerador de código que, a partir de dois tipos de diretivas
inseridas no código fonte dos shaders, gera código wrapper com todas as chamadas
às API OpenGL ou CUDA necessárias antes da chamada ao shader, simplificando a
criação e manutenção de uma biblioteca de processamento de vídeo. A biblioteca
proposta tem desempenho melhor que a GPUCV em quase todos os
operadores testados.

Material do Seminário:

Slides

Confira nossa série completa de Seminários

Material Seminário USP: Modelagem Atmosférica usando GPU

Seminário pertencente à Série de Seminários de Programação para GPGPU da USP.

Descrição:

Modelagem Atmosférica usando GPU

Material do Seminário:

Slides

Confira nossa série completa de Seminários.

Seminário USP: Modelagem Atmosférica usando GPU

USP Seminário de Programação para GPGPU

Título: Modelagem Atmosférica usando GPU
Palestrante: Pedro da Silva Peixoto
Doutorando em Matemática Aplicada – MAP-IME-USP

Hora e Data: 16h, sexta-feira, 20 de maio de 2011

Local:
IME-USP, Sala 254, Bloco A
Rua do Matão, 1010 – Cidade Universitária – São Paulo -
SP – Brasil

Resumo:

Tendo em vista uma análise de custo-benefício do uso de GPU
em aplicações de grande porte, vamos discutir alguns testes
realizados em GPU  para modelos meteorológicos. Analisaremos
o custo de tradução de códigos (passagem de códigos de
Fortran/C para a linguagem CUDA) e veremos alguns métodos de
tradução automática e métodos de auto-paralelismo.

Confira nossa série completa de Seminários

HPC on Graphics Hardware (GPU) – CILAMCE 2011

Dear colleagues,

The 32nd edition of CILAMCE – Iberian-Latin American Congress
on Computational Methods in Engineering will be held in Ouro
Preto, Brazil, from 13th to 16th of November, 2011.

We would like to invite you to participate in the third edition of
the mini-symposium “High Performance Computing on Graphics
Hardware (GPU)”, which we are organizing in this conference.

Prospective authors can get more information and submit their
abstracts through the conference page,
http://www.acquacon.com.br/cilamce2011

The deadline for abstract submission is May 31st, 2011.

We are looking forward to meeting you in Ouro Preto!

Kindest regards,

Euclides Mesquita
Josué Labaki
Luiz Otávio Saraiva Ferreira

Material Seminário USP: String Matching em GPUs

Seminário pertencente à Série de Seminários de Programação para GPGPU da USP.

Descrição:

String Matching em GPUs

Material do Seminário:

Slides

Video:
http://www.youtube.com/p/5ADBE821B1DEE905?hl=pt_BR&fs=1

Parte 1:

Parte 2:

Saiba mais

Material Seminário USP: Considerações de Desempenho em CUDA – Parte 1

Primeira parte de uma série de seminários na USP  sobre otimização de código e outras considerações de desempenho em CUDA e sistemas paralelos.

Conteúdo:

- Revisão da Arquitetura CUDA
- Avaliação de Desempenho
- Execução Assíncrona e Paralela
- Transferência de Dados CPU-GPU
- Kernels Paralelos

Material do Seminário:

Slides

Playlist da Apresentação:
http://www.youtube.com/p/885F67F7715F8F3F?hl=pt_BR&fs=1

Introdução:

Métricas de Desempenho:

Saiba mais

Seminário USP: Considerações de Desempenho em CUDA – Parte 1

USPTítulo: Considerações de Desempenho em CUDA – Parte 1
Palestrante: Thársis T. P. Souza
Centro de Computação Eletrônica – CCE-USP

Biografia do palestrante:
Engenheiro de Computação – UNICAMP
Mestrando em Ciência da Computação – IME-USP

Hora e Data: 16h, sexta-feira, 29 de abril de 2011
Local: IME-USP, Sala 254, Bloco A
Rua do Matão, 1010 – Cidade Universitária – São Paulo – SP – Brasil

Resumo:
Cada vez mais, arquiteturas modernas de GPU expõe maior capacidade e flexibilidade em programação para propósito geral.
Desse maior poder, decorre maior responsabilidade na utilização dos recursos disponíveis.
Nessa mini-série de seminários, cobriremos os principais aspectos e considerações de desempenho em CUDA em uma arquitetura moderna de GPU.

Nesta primeira parte, os seguintes assuntos serão tratados:

- Revisão Arquitetura CUDA
- Avaliação de Desempenho
- Execução Assíncrona e Paralela
- Transferência de Dados CPU-GPU
- Kernels Paralelos

Confira nossa série completa de Seminários

Onde conseguir uma GPU para estudos científicos?

Muitas vezes necessitamos de GPUs mais poderosas ou com uma arquitetura de última geração para realização de estudos científicos, mas não temos acesso a tais recursos em nosso ambiente de trabalho.

No Brasil, existe o Sistema Nacional de Processamento de Alto Desempenho (SINAPAD). Trata-se de Centros Nacionais de Processamento de Alto Desempenho (CENAPADs) espalhados pelo Brasil.

Cenapads

SINAPAD

Alguns dos centros possuem máquinas com GPUs e qualquer um pode requisitar acesso, dentro dos requisitos estabelecidos. Um bom exemplo, é o CENAPAD de São Paulo, que se localiza na Unicamp. Esse centro conta com 12 GPUs nVidia Tesla M2050 instaladas em seis servidores X86 com processadores Intel Xeon Processador X5570 (2.93GHz). Uma lista de recursos dos CENAPADs pode ser encontrada em: http://www.lncc.br/sinapad/recursos.php

Além dos CENAPADs, existem várias universidades brasileiras que já lecionam sobre GPGPU. No site da NVidia é possível encontrar um mapa de universidades brasileiras que lecionam CUDA:

http://www.nvidia.com/object/cuda_courses_and_map.html

Se você é aluno ou docente em algum desses centros de pesquisa, certamente poderá encontrar uma GPU para estudos científicos.

NVIDIA e AMD: Uma breve comparação de arquiteturas

Com o início da popularização do OpenCL, que permite um mesmo programa utilizar o poder computacional de GPUs tanto da NVIDIA quanto da AMD ou de ambas ao mesmo tempo, é interessante conhecer a arquitetura das GPUs de ambos os fabricantes para melhor desenvolver um algoritmo ou escolher entre os hardwares. É comum os fabricantes de GPUs anunciarem os seus produtos destacando o número de “Cuda Cores” (ou “Stream Processors”, no caso da AMD) que cada um possui. Dessa forma é importante conhecer o que cada fabricante define como “core” da GPU e saber das capacidades de cada um.

Primeiramente iremos analisar a última arquitetura da NVIDIA, conhecida como Fermi (Fig. 1). Com relação à parte de cálculo, a Fermi é dividida em 16 multiprocessadores ou SMs (na Fig. 1, um multiprocessador está destacado em vermelho) e cada multiprocessador é formado por 32 Cuda Cores e outras unidades (Fig. 2). Cada Cuda Core é formado por uma unidade de processamento de ponto-flutuante de precisão simples e outra de processamento de inteiros (em destaque na Fig. 2) e é esse Cuda Core que será responsável por processar um thread do Kernel (quando for exigido apenas precisão simples ou inteiros; observe que o Cuda Core somente irá usar ou a unidade FP ou a INT por vez, de acordo com a instrução pedida, nunca as duas juntas). Com base nessas informações, é possível determinar o número total de “cores” da Fermi como sendo: 16 * 32 = 512 Cuda Cores. Observe que as novas placas baseadas na arquitetura Fermi que acabaram de ser lançadas (Geforce GTX 480) possui 15 multiprocessadores, o que resulta em: 15 * 32 = 480 Cuda Cores.

Fig. 1: Arquitetura Fermi. Visão dos 16 SMs (Streaming Multiprocessor). Fonte: NVIDIA.

Além do número de “cores”, é interessante conhecer o poder computacional em GFlops da Fermi para termos uma boa base de comparação entre diferentes arquiteturas. Para isso, é necessário mais algumas informações: a velocidade que cada “core” está trabalhando, chamado de “Processor Clock” ou “Shader Clock” ou mesmo “Hot Clock”; e como cada “core” executa suas instruções para cada ciclo de clock. A primeira informação é facilmente obtida lendo as especificações de sua placa de video: para a Geforce GTX 480, o processor clock é igual a 1401 MHz (informação obitida pelo site da NVIDIA), já a segunda informação é específico de cada arquitetura, no caso da Fermi, cada núcleo é capaz de executar duas  operações de ponto-flutuante por ciclo de clock, isso equivale a 2 Flops por ciclo de clock. Essas duas operações por clock, na verdade, correspondem a um FMA (fused multiply-add), no qual a seguinte operação matemática é realizada: A = A+B*C (veja que isso representa uma soma e uma multiplicação -> 2 Flops). Com essas informações, já é possível calcular o desempenho máximo da Geforce GTX 480 como sendo: (número de Cuda Cores) * (processor clock, em GHz) * (operações por clock), que equivale a: 480 * 1,401 * 2 = 1345 GFlops (em precisão simples). Observe que se a Geforce GTX 480 tivesse todos os 16 SMs habilitados, ela teria um desempenho igual a: 512 * 1,401 * 2 = 1435 GFlops (em precisão simples).

Fig. 2: Visão detalhada do SM e do CUDA Core. Fonte: NVIDIA.

Para calcularmos o poder computacional para precisão dupla, devemos conhecer como a Fermi lida com esse tipo de dado internamente. Na arquitetura Fermi, quando queremos realizar operações em precisão dupla, os Cuda Cores são utilizados aos pares para executar os cálculos (lembre-se que cada “core” possui uma unidade FP de precisão simples, assim quando dois “cores” são combinados teremos o equivalente a um “core” com uma unidade FP de precisão dupla), o que resulta na metade de “cores” disponíveis para os threads. Assim, o desempenho máximo em precisão dupla para a Geforce GTX 480 é dado por: 480/2 * 1,401 * 2 = 672 GFlops (em precisão dupla).

Com os dados acima, podemos partir para o estudo da arquitetura da AMD, conhecida como “Cypress (RV870)” que está dentro da Radeon HD5870. Na arquitetura AMD, as unidades de cálculo são conhecidas como “SIMD Engines” e a HD5870 possui 20 dessas unidades conforme ilustra a Fig. 3 (destacado em azul). Por sua vez, cada SIMD Engine é formado por 16 “Stream Cores” (destacado em verde na Fig. 3) e está detalhado pela Fig. 4. O “Stream Core” corresponde a unidade básica de cálculo para o RV870, porém o mesmo ainda é constituído por 5 ALUs (Arithmetic Logic Unit) que são responsáveis por realizar as operações númericas exigidas e são chamadas pela AMD de “Stream Processors”. Dentre as 5 ALUs do “Stream Core”, 4 são para uso geral (retângulos mais finos) e capazes de operar em ponto-flutuante ou inteiro. A outra ALU restante (retângulo maior) é reservada para funções especiais (seno, cosseno, log, etc) e também é capaz de operar em ponto-flutuante de precisão simples. Da mesma forma que a Fermi, as ALUs da RV870 são capazes de realizar duas operações de ponto-flutuante em precisão simples por ciclo de clock (instrução FMAD). Assim, o número total de “Stream Processors” presente na Radeon HD5870 é igual a: 20 * 16 * 5 = 1600 stream processors.

Fig. 3: Arquitetura "Cypress" (RV870) da AMD. Visão dos 20 SIMD engines cada um composto por 16 SCs (Stream Cores). Fonte: AMD.

O desempenho da RV870 é dependente da velocidade de operação de suas ALUs da mesma forma que a Fermi: para a Radeon HD5870, essa velocidade é igual a 850 MHz. Assim, o poder computacional dessa placa pode ser calculado da mesma forma que para a Fermi: 1600 * 0,850 * 2 = 2720 GFlops. Para a precisão dupla, a RV870 funciona de maneira diferente da Fermi: a ALU reservada para as funções especiais (retângulo maior) não participa dos cálculos em precisão dupla e as 4 ALUs restantes combinadas são capazes de realizar apenas 2 operações de ponto-flutuante em precisão dupla (FMAD) por ciclo de clock. Isso equivale dizer que o número de unidades para processamento em precisão dupla é igual ao número de “Stream Cores”: 20 * 16 = 320 “cores”. Com essas informações, o desempenho da HD5870 em precisão dupla é igual a: 320 * 0.850 * 2 = 544 GFlops.

Fig. 4: Visão detalhada de um Stream Core. Composto por 5 PE (Processing Elements). Fonte: AMD.

É interessante observar que embora a HD5870 tenha mais unidades de cálculo que a GTX 480, elas funcionam a uma freqüência de clock menor, o que faz com que a diferença em desempenho não seja proporcional apenas ao número dessas ALUs, em precisão simples. Já em precisão dupla, essa diferença é ainda menor devido ao modo como essas unidades de cálculo operam com esses dados. Deve-se ter em mente que essa comparação serve apenas como uma primeira abordagem de avaliação de desempenho, pois ela não leva em conta, por exemplo, o desempenho das arquiteturas para o cálculo de funções transcedentais (seno, cosseno, etc) e nem a capacidade de cada uma em operar com texturas. Características que podem ser importantes para alguns tipos de programas.

Qualquer sugestão ou comentário será bem vindo.

Fontes:

[1] Fermi Compute Architecture White Paper.

[2] GPU Computing: Past, Present and Future with ATI Stream Technology.

[3] Heterogeneous Computing: OpenCL and the ATI Radeon HD5870 (“Evergreen”) Architecture.

PhD Student Positions Available

[Ver]

Reference: CISTER-BD/General/01/10

Area: Multicore Systems, Adaptive RT Systems, RT Software, Cyber Physical Systems, and Sensor Networks

Application Deadline: 18, Apr, 2010

Send Application To: JOBS@cister-isep.info

Contact Person: Stefan M. Petters

Salary: up to 14,400 Euros / year (after taxes)

Duration: up to 4 years

Requirements: The candidates should have a Bachelor, Licenciate, or MSc degree in Computer Science, Computer Engineering or related fields like Electrical Engineering with strong focus on Computer Engeneering. GRE and TOEFL are welcome. Fluency in written and spoken English is required. Candidates holding a Bachelor/Licenciate degree with a GPA (Grade Point Average) greater or equal to 75% are preferred.

“Fermi”: nova GPU da NVIDIA trará benefícios ao GPGPU

Aqui está uma boa notícia para o pessoal que está trabalhando com GPGPU: a nova geração de GPUs da NVIDIA, “Fermi”, possui uma arquitetura que beneficiará os programas de supercomputação. Uma característica é a presença da memória com ECC (“error correction code”), que será capaz de corrigir alguns erros de dados na memória, um problema já conhecido e discutido pela HPCwire.

Outra caracterísitca é a presença de um cache L1 e L2 na GPU, que beneficiará as transferâncias de memórias requisitadas pelos threads.

Fermi_architecture

Arquitetura Fermi. Fonte: Nvidia.

Como é de costume, essa nova arquitetura trará mais “CUDA cores” que a geração anterior, um melhor suporte às operações numéricas de precisão dupla e um maior poder computacional. Apenas como comparação, o Fermi terá 512 “CUDA cores” contra 240 de uma GeForce GTX 280. Sua capacidade computacional é estimada em 1500 GFlops para precisão simples e 750 GFlops para precisão dupla, contra 933 GFlops para precisão simples e 78 GFlops para precisão dupla da mesma GeForce GTX 280.

Vocês podem conferir essas informações no site da NVIDIA e também ler uma descrição mais detalhada da arquitetura Fermi no site TechReport.

No YouTube, já dá pra ver algumas palestras fantásticas sobre o Fermi:

Aguarde nossos vídeos legendados em breve!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.