Simulações incríveis!!!

Olá pessoal, depois de um bom tempo sem postar nada aqui no nosso site, finalmente decidi divulgar o trabalho de algumas pessoas na área de simulações computacionais. O video abaixo foi feito pela Lagoa Technologies e simula diferentes fenômenos como colisões de material particulado, fluidos e tecido. É realmente impressionante a qualidade da simulação!!!

Acredito que eles tenham usado algum método de simulação por partículas como o SPH ou o DEM.

Acho que essa foi a simulação de terra mais real que eu já vi!!!

Nesse link também temos outras simulações da Lagoa Technologies.

Outras simulações interessantes que também utilizam o método de partículas podem ser vistas nesse vídeo (download).

Em breve eu pretendo postar um bom material sobre o método de partículas, mas primeiro tenho de organizar tudo. Até a próxima.

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.

GPU Computing – GeForce and Radeon OpenCL Test

Artigo escrito pelo nosso colega de trabalho Luiz Gustavo Turatti onde é feita uma avaliação do estado atual dos drivers OpenCL tanto da AMD quanto da NVIDIA.

Neste trabalho diversos programas em OpenCL foram executados em diferentes modelos de placas gráficas da AMD e da NVIDIA e o desempenho avaliado.

Link para o artigo: “GPU Computing – GeForce and Radeon OpenCL Test“.

Demonstração do OpenCL com 1,000,000 partículas

Artigo sobre CUDA

Artigo publicado na “Viva o Linux” por Alessandro de Oliveira Faria (A.K.A CABELO) sobre a tecnologia CUDA da NVidia.

Nesse artigo ele faz uma introdução sobre a tecnologia CUDA e o seu potencial em acelerar cálculos computacionais através da paralelização. Na segunda parte do artigo, é apresentado um tutorial de instalação do CUDA e como compilar e executar os exemplos que acompanham o SDK.

Link para o artigo: “CUDA: Programe a sua NVIDIA“.

Livro: “Numerical Recipes in C”

O livro “Numerical Recipes in C” é um bom ponto de partida para se aprender sobre vários métodos numéricos, como resolução de sistemas lineares, maximização e minimização de funçoes, FFT e outros métodos. Cada capítulo do livro possui uma rápida explicação do método, seguido do seu respectivo código-fonte. Além disso, caso o leitor deseje se aprofundar mais em um determinado método, existem algumas referências bibliográficas no final de cada capítulo.

Neste link, encontra-se o índice do livro, onde é possível consultar os contéudos que o livro aborda.

Saiba as especificações de sua GPU com “GPU-Z”

Aqui vai mais uma dica para o pessoal que acompanha o nosso blog. Existe um programinha bastante útil para verificar as especificações de sua GPU, como o “fill rate”, o número de shaders, a memória, os clocks, etc, chamado GPU-Z (o link para donwload está no final do post).

Abaixo está uma captura de tela do programa para que vocês tenham uma idéia das informações que o programa irá fornecer.

GPU-Z Screenshot

GPU-Z Screenshot

Esse programa costuma ser utilizado por “overclockers” de GPU para demonstrar o funcionamento de suas placas de vídeo com uma velocidade de clock mais elevado.

Além do GPU-Z também existe uma versão para a CPU chamado de CPU-Z.

Baixe o GPU-Z aqui.

Baixe o CPU-Z aqui.

Adobe Flash 10.1 terá aceleração por GPU

De acordo com o site da NVIDIA, a nova versão do Flash Player 10.1 será capaz de utilizar a GPU para a aceleração de vídeo. O foco é para dispositivos portáteis que possuem CPUs com menor capacidade de processamento, como as plataformas ION e Tegra, pois ao descarregar parte do processamento para a GPU, a utilização da CPU se reduzirá e assim o usuário terá uma melhor resposta do sistema.

Com essa aceleração, esses dispositivos móveis poderão ser capazes de executar conteúdo de alta definição (HD) sem os famosos “lags” e ainda assim manter o consumo de energia baixo.

“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!

Novo membro

Boa tarde pessoal!!! Acabei de me juntar ao GPUBrasil como um dos autores do site. Dessa forma, juntamente com o Labaki, estarei postando novidades e tutoriais no site de forma a deixá-lo mais dinâmico e informativo.

Espero que as nossas atualizações ao site contribuam na divulgação do uso do GPGPU no Brasil e que também sirvam de ajuda aos iniciantes no assunto.

Todas os comentários e sugestões serão bem vindos.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.