Roberto Colistete Jr.

Blog sobre computação científica e móvel : Mathematica, Python, CUDA, smartphone & tablets, Linux, etc

Archive for the ‘CUDA’ Category

CUDA – Programação em GPU

Escolhendo placa-de-vídeo e computador para cálculos em GPU com CUDA

Posted by robertocolistete em 27/07/2012

De 2007 para cá ficou muito acessível a computação paralela para GPU (Graphical Processing Units) usando CUDA (Compute Unified Device Architecture), que é uma arquitetura proprietária da NVidia e compatível somente com placas-de-vídeo da marca NVidia. A placa-de-vídeo se comunica com a CPU do computador e tem seu próprio processador (GPU) e memória.

Em Março de 2012 foi lançada a família Kepler das GPU’s NVidia, a anterior é a família Fermi. Ambas são recomendadas pois suportam cálculos de precisão dupla, muito comuns em aplicações científicas. A nomenclatura da NVidia é muito confusa, logo recomenda-se sempre pesquisar na Internet (além dos sites da NVidia citados acima, tabela do NotebookCheck, GPU-Review, etc) sobre a placa-de-vídeo em questão para saber os detalhes em termos de :

  • número de núcleos (em inglês “cores”), atualmente o mínimo é de 48 (p.e., GeForce GT 610) nos modelos de 2012, até 1536 (na GeForce GTX-680, vide matéria minha anterior);
  • velocidade da GPU, até família Fermi tinha shader speed com o dobro da core speed, agora na Kepler é a mesma frequência (mas quadruplicaram o número de núcleos). A core speed é da ordem de centenas de MHz;
  • memória : tamanho (GB), tipo (DDR3 ou GDD5 que é mais rápida), velocidade (centenhas de MHz até 6 GHz), tamanho em bits do barramento (64 a 384 bits), largura de banda (em GB/s, desde poucas dezenas a algumas centenas);
  • capacidade computacional (CC), sendo 2.0/2.1 para Fermi e 3.0 para Kepler;
  • potência dissipada (W);
  • tipo de saída de vídeo, etc.

Há 3 famílias de placas-de-vídeo/GPU’s da NVidia, em termos crescente de profissionalismo científico :

  • NVidia GeForce : optimizadas para velocidade em jogos e cálculos com precisão simples (SP, Single Precision, ou FP32), tem baixo custo e fácil disponibilidade nas versões de desktop e notebook;
  • NVidia Quadro : orientadas para workstations de visualização, têm drivers e firmwares optimizados para visualização (CAD/CAM, OpenGL, etc), mais memória (até 6GB na Quadro 6000), maior estabilidade (clock mais baixo e memórias mais testadas e com menor chance de gerar erros nos resultados), memória ECC (com correção de erros) nas Quadro 5000 e 6000, precisão dupla (DP, Double Precision, ou FP64) com desempenho melhorado nas Quadro 4000, 5000 e 6000, potência dissipada reduzida (Quadro 2000 com 192 núcleos dissipa 60 W), menor tamanho ocupando menos slots, etc. Vide tabela comparativa detalhada das Quadro. Tem preço bem maior que as GeForce com mesmo número de núcleos;
  • NVidia Tesla : optimizada para desempenho em computação científica de precisão dupla (caso das Teslas Fermi), maior estabilidade (clock mais baixo e memórias mais testadas e com menor chance de gerar erros nos resultados), memória ECC (com correção de erros), mais memória (até 6GB na Tesla C2070/2075), GPU Direct (duas ou mais GPU’s se comunicam diretamente, sem passar pela CPU), potência reduzida, suporte profissional da NVidia, etc. Tem preço bem maior que as GeForce com mesmo número de núcleos.

Para cálculos científicos em CUDA, o que se deve analisar para se escolher uma GPU com CUDA ? Vejamos :

  1. a frequência da necessidade de calcular em precisão dupla (15 algarismos) no lugar de simples (7-8 algarismos);
  2. o desempenho em GFlop/s de pico em SP e DP, às vezes via relação de desempenho DP/SP da placa-de-vídeo;
  3. o custo-benefício de desempenho em SP e DP;
  4. necessidade de memória RAM e de largura de banda em função dos tipos de problemas a serem resolvidos na GPU;
  5. a necessidade das famílias Quadro e Tesla para se ter baixíssima taxa de erro nos resultados, também em função do tipo de cálculos.
GPU Família Núcleos DP/SP GFlop/s DP GFlop/s SP Banda GB/s Preço R$
GeForce GT 540M Fermi   96 1/12  22  258  29 R$200 no notebook
GeForce GT 430 Fermi   96 1/12  22  269  26  200
GeForce GT 640M Kepler  384 1/24  20  480  29 R$400 no notebook
GeForce GT 640 Kepler  384 1/24  29  691  29  400
GeForce GTX 560 Ti Fermi  384 1/12 105 1263 128 1.000
GeForce GTX 580 Fermi  512  1/8 200 1581 192 2.100
GeForce GTX 680 Kepler 1536 1/24 129 3090 192 2.500
GeForce GTX 590 Fermi 2×512 1/8 311 2488 328 4.000
GeForce GTX 690 Kepler 2×1536 1/24 234 5.622 385 5.200
Quadro 600 Fermi   96 1/12  21  246  26  700
Quadro 2000 Fermi  192 1/12  40  480  42 2.400
Quadro 4000 Fermi  256  1/2 243  486  90 3.300
Quadro 5000 Fermi  352  1/2 359  718 120 8.500
Tesla C2050 Fermi  448  1/2 515 1030 144 7.000
Tesla C2075 Fermi  448  1/2 515 1030 144 12.800

Tabela comparativa de GPU’s NVidia com valores parcelados no Brasil pesquisados em 07/2012.

Comentários sobre a tabela acima :

  • sim, a GeForce GTX 680 realiza 3 TeraFlop/s de pico em SP (trilhões de cálculos de ponto flutuante em precisão simples por segundo) !
  • sim, a Tesla C2050/70/75 calcula 0,5 TeraFlop/s de pico em DP (trilhões de cálculos de ponto flutuante em precisão dupla por segundo) ! No teste nbody (do CUDA Toolkit) que eu rodei alcançou 489 TeraFlop/s em SP e 245 TeraFlop/s em DP;
  • para efeitos de comparação, um núcleo de uma CPU Intel Core i7 tem desempenho de pico entre 10 e 23 GFlop/s (SP ou DP), porém isso é dificilmente alcançado;
  • GTX 590 e GTX 690 são basicamente duas GTX 580 e GTX 680 juntas, respectivamente;
  • a geração Kepler tem baixa (1/24) relação DP/SP, logo se precisão dupla for essencial é às vezes melhor continuar na família Fermi por enquanto;
  • embora o número de núcleos tenha quadruplicado (p.e., GT 540M x GT 640M) na família Kepler, o desempenho em SP é aprox. 2x e o mesmo em DP;
  • as Quadro e Tesla são imbatíveis em precisão dupla, mas a relação custo x benefício precisa ser analisada;
  • a Tesla K10 da família Kepler não foi incluída pois não foi encontrada no Brasil e por ter desempenho fraco em DP, tanto que mesmo no exterior não foi adotada como sucessora das Tesla Fermi. Tem duas GPU’s da GTX 680, i.e., 2 x 1536 núcleos, 190 GFlop/s em DP, 4.577 GFlop/s em SP, 1/24 de DP/SP, 320 GB/s, preço em torno de US$2.500;
  • a Tesla K20 da família Kepler será lançada no final de 2012, com promessa de 1,5 TeraFlop/s em DP, aí sim será uma substituta melhor que as Tesla 20xx Fermi atuais;
  • para cálculos de precisão simples, a relação custo x benefício de uma GeForce Kepler chega a ser 10-15x melhor que uma Quadro/Tesla;

Daqui em diante nesse artigo eu vou focar em hardware sugerido para programação de GPU usando CUDA, atualmente e no Brasil. Abordarei computadores notebooks e desktops novos, bem como adicionar placa-de-vídeo NVidia a computador desktop já existente.

Comecemos pelos notebooks, onde os valores citados são parcelados e em lojas de renome. Vemos que a partir de R$2 mil há bons modelos com NVidia GeForce:

1) Apple MacBook (Air e Pro) alternam placas-de-vídeo Intel, AMD ATI e NVidia. Por exemplo, os MacBook (inclusive Air) de 2010 tinham GeForce 320M. Atualmente só o MacBook Pro (15,4″, Core i7QM) a partir de R$7.999 tem GeForce GT 650M (512MB/1GB GDDR5, 384 núcleos, Kepler);

2) Asus :

3) Dell :

4) LG P430 (14″, Core i7M) a partir de R$2.249, com GeForce GT 520M (1GB, 48 núcleos, Fermi);

5) Samsung :

6) Sony :

Quanto a computadores desktops novos com placas-de-vídeo NVidia, há muitas lojas pequenas e médias que montam configurações dedicadas para “gamers”, em que a fonte de energia e gabinete precisam ser adequados à potência consumida pela placa-de-vídeo (desde 60 a 300W). Citarei as lojas maiores e com valores parcelados :

1) Dell :

2) FirstPlace : tem várias configurações já prontas, de R$2 mil a R$22 mil, permitindo personalizá-las, com a linha gamer (NVidia GeForce) e a linha de workstations profissionais (usando as NVidia Quadro e Tesla). Citarei algumas configurações (que têm CPU, RAM, etc bem diferentes) :

3) X5 Computadores : tem mais de uma centena de configurações prontas, com GeForce, Quadro (600, 2000, 4000 e 6000) e Tesla (C2075), variando de R$2,5 mil a R$75 mil (à vista).

Adição de placa-de-vídeo NVidia a computador desktop já existente. Como isso implica normalmente em mudar a fonte e gabinete do computador para placas-de-vídeo que consomem acima de 75W (limite de um slot PCI-E), vou evitar tais pesados gastos e sugerir somente aquelas com menos de 70W de consumo máximo (aí basta abrir o gabinete e colocar a placa-de-vídeo no slot PCI-E) :

Conclusão : para quem quer iniciar no mundo de computação paralela de GPU & CUDA, o custo básico é uns R$200 quer seja adicionando uma placa-de-vídeo NVidia em computador desktop usado ou a mais no preço de um notebook ou desktop novo. E para cálculos da ordem de TFlop/s, sai por R$3 mil em diante um computador desktop completo.

Posted in CUDA | 6 Comments »

Intel Xeon Phi : 50 núcleos de CPU para computação paralela

Posted by robertocolistete em 19/06/2012

A Intel ontem anunciou o Intel Xeon Phi (Knights Corner) coprocessor : uma placa PCIe que tem pouco mais de 50 núcleos de CPU Intel para rodar em paralelo, usando tecnologia de 22 nm e transístores 3-D Trigate. Hoje já mostra desempenho de aprox. 1 TeraFlop (trilhão de operações de ponto flutuante por segundo) em precisão dupla.

Vários detalhes são desconhecidos sobre essa placa Intel Xeon Phi, como preço, potência consumida, número exato de núcleos, etc. Mas é público que terá (ao menos ?) 8GB GDDR5 de memória RAM (primeira vez que Intel usa GDDR) e o seu próprio sistema operacional (Linux) embutido na placa. Nesse outro artigo vemos que haverá compilador gcc modificado rodando nesse Linux 64 bits embutido.

Começará a vender no 2o semestre de 2012, sendo o Xeon Phi recomendado para montar clusters de computadores de alto desempenho, incluindo os maiores supercomputadores mundiais. Agora em Junho o maior supercomputador mundial é o Sequoia e chega a 16 PetaFlops (mil TeraFlops !) com 1,57 milhões de núcleos (e usa Linux).

(Atualizado em 02/08/2012) Mais um artigo interessante, citando que o Xeon Phi usará variantes das instruções x86, não compatíveis com CPU’s Intel.

Claramente o Intel Xeon Phi é uma iniciativa da Intel para se contrapor a computação parelela de GPU’s, p.e., usando CUDA. Vide artigo sobre a Nvidia GeForce GTX 680 que consegue 3 TeraFlops com precisão simples.

Posted in CUDA, Linux | Leave a Comment »

Geração Kepler : Nvidia GeForce GTX 680 com 1536 núcleos e GDDR5 @ 6 GHz !

Posted by robertocolistete em 24/03/2012

A Nvidia lançou em 22/03/2012 a nova geração Kepler de placa-de-vídeo, começando pela GTX 680.

Tal placa-de-vídeo possibilita programação CUDA (Compute Unified Device Architecture), que é uma arquitetura de computação paralela para GPU (Graphical Processing Units), permitindo programação em C/C++ e outras linguagens (Python via PyCUDA, Mathematica 8 CUDA, etc) usando paralelismo das GPU que têm dezenas até mais de mil núcleos de processamento (enquanto CPU’s tem alguns núcleos, tipicamente  2 ou 4 atualmente).

São muitas mudanças entre a geração Fermi anterior e a nova Kepler :

  • a arquitetura GK104 (Kepler) usa tecnologia de fabricação de 28 nm ao invés de 40 nm, apresentando o dobro da eficiência de desempenho por dissipação de energia em Watts;
  • 1536 núcleos (cores em inglês) na GTX 680 ao invés de 512 cores na GTX 580 (Fermi);
  • 3090 GFlops (sim, 3 TeraFlops, obviamente em condições ideais) na GTX 680 versus 1581 GFlops da GTX 580;
  • memória de vídeo GDD5 a 6.008 MHz ao invés de 4.008 MHz;
  • barramento de 256 bits a 1.502 MHz na GTX 680 versus 384 bits a 1.002 MHz na GTX 580 resulta na mesma capacidade de transferência, 192 GB/s;
  • 3,54 bilhões de transístores em 294 mm^2 ao invés de 3 bilhões em 520 mm^2 na Fermi;
  • 195 W (GTX 680) versus 244 W (GTX 580 Fermi).

Veja mais detalhes em várias matérias sobre a Nvidia GeForce GTX 680 :

Interessante será analisar o impacto dessa geração Kepler na programação CUDA, por exemplo via tal matéria : The GeForce GTX 680: A Developer’s Perspective. A 1a tabela da matéria acima da AnandTech deixa claro que o desempenho de precisão dupla (FP64) no GK104 é somente 1/24 da precisão simples, enquanto que era 1/8 na Fermi. Ou seja, em precisão dupla a GTX 680 parece ser inferior a GTX 580.

Também foi anunciada a versão para notebooks, a linha GeForce 600M, mas somente a GPU GK107 é da geração Kepler, com 384 cores (1/4 do GK104) e barramento de 128 bits (versus 256 bits do GK104). Para variar, a nomenclatura de GeForce para notebooks é confusa, com GTX 670M e 675M na verdade usando a GPU Fermi GF114 e das GTX para notebook, só a GTX 660M tem GPU Kepler. Das GT 6xx M, a GT 640M e 650M são da geração Kepler.

Como curiosidade, as gerações de GPU da Nvidia têm nomes de físicos : Tesla (65 nm) em 2007, Fermi (40 nm) em 2009, agora Kepler (28 nm) em 2012, Maxwell (22 nm) para 2013, etc.

Posted in CAS, CUDA, Mathematica, Python | 3 Comments »

 
%d blogueiros gostam disto: