Computação de propósito geral na unidade de processamento gráfico

Computação de propósito geral em unidade de processamento gráfico ( GPGPU para breve , do inglês para computação de propósito geral em unidade ( s) de processamento gráfico ( s) ) refere-se ao uso de um processador gráfico para cálculos além de seu escopo original. Podem ser, por exemplo, cálculos para simulações técnicas ou econômicas. Com algoritmos paralelos , um enorme aumento na velocidade pode ser alcançado em comparação com o processador principal .

visão global

O GPGPU surgiu dos shaders dos processadores gráficos. Sua força reside na execução de tarefas uniformes ao mesmo tempo, como colorir pixels ou multiplicar grandes matrizes . Uma vez que o aumento na velocidade dos processadores modernos não pode mais (principalmente) ser alcançado pelo aumento da taxa de clock, a paralelização é um fator importante para alcançar maior poder de computação em computadores modernos. A vantagem de usar a GPU sobre a CPU reside no maior poder de computação e na maior largura de banda da memória. A velocidade é alcançada principalmente pelo alto grau de paralelismo das operações aritméticas do processador gráfico.

modelo Poder de computação teórica
Taxa de dados do barramento de memória
( GByte / s )
Tipo de armazenamento Arte
com simples em dobro
Precisão ( GFlops )
AMD Radeon Pro Duo 16.384 1.024 1.024 HBM GPU
AMD Radeon R9 Fury X 8.602 538 512
Nvidia Geforce GTX Titan X 6.144 192 336 GDDR5
AMD FirePro W9100 5.350 2.675 320
Nvidia Tesla K20X 3.950 1.310 250
AMD Radeon HD 7970 3.789 947 264
Intel Xeon Phi 7120 2.420 1.210 352 Coprocessador
PlayStation 4 SoC ( AMD ) 1.860 - 167 APU
Nvidia Geforce GTX 580 1.581 198 192,4 GPU
Intel Xeon E7-8890 v3 1.440 720 102,4 (?) DDR4 CPU
AMD A10-7850k 856 - 34 DDR3 APU
Intel Core i7-3930K 307,2 153,6 51,2 CPU
Intel Pentium 4 com SSE3, 3,6 GHz 14,4 7,2 6,4 DDR2

Fragment e vertex shaders podem ser executados ao mesmo tempo. Outra vantagem é o preço baixo em comparação com outras soluções igualmente rápidas, bem como o fato de que as placas de vídeo adequadas podem ser encontradas em quase todos os PCs hoje.

história

No início, os sombreadores eram associados apenas a funções especiais intimamente vinculadas a cálculos gráficos. Para acelerar a velocidade do cálculo de pixels individuais, passou-se a executar o cálculo de pixels individuais ao mesmo tempo, usando várias unidades aritméticas semelhantes. Mais tarde, a ideia de expandir as capacidades muito limitadas dos shaders para transformá-los em unidades de computação maciçamente paralelas para qualquer tarefa: os primeiros - mais ou menos - shaders livremente programáveis ​​surgiram. A tendência de projetar sombreadores de maneira livremente programável continua até hoje e está sendo impulsionada pelos projetistas de chips a cada nova geração de tecnologia. As GPUs modernas às vezes têm mais de 1000 dessas unidades de sombreador programáveis ​​e, portanto, também podem realizar mais de 1000 operações de computação ao mesmo tempo.

crítica

Por OpenCL existe uma interface uniforme para implementar cálculos GPGPU. A desvantagem em relação às CPUs convencionais é o grande paralelismo com que os programas devem ser executados para aproveitar essas vantagens. As GPUs também são limitadas em sua funcionalidade. Existem modelos gráficos especiais ( Nvidia Tesla , AMD FireStream ) para o setor científico . A memória dessas placas gráficas possui procedimentos de correção de erros e sua precisão no cálculo dos números de ponto flutuante é maior, o que também se reflete nos custos.

programação

OpenCL , CUDA e, desde 2012, C ++ AMP estão disponíveis principalmente para o desenvolvimento de programas compatíveis com GPGPU . OpenCL é um padrão aberto que está disponível em muitas plataformas, enquanto CUDA é um framework proprietário da Nvidia e só pode ser executado em GPUs deste fabricante. AMP é uma das C ++ -Spracherweiterung iniciadas pela Microsoft em conjunto com um pequeno modelo - biblioteca que é aberta no sentido de que nem produtos da Microsoft, nem para determinados tipos de hardware do Acelerador ou determinados fabricantes de hardware (pode usar não apenas GPGPUs, mas também CPUs e, no futuro, outras opções de paralelização, como computação em nuvem ). Na implementação AMP da Microsoft, espera- se que a GPU suporte DirectX Versão 11, pois foi somente com essa versão que atenção especial foi dada ao uso de GPUs como GPGPUs. Se um programa que usa AMP não encontrar uma GPU suficientemente atualizada, o algoritmo programado com a ajuda de AMP é executado automaticamente na CPU usando suas opções de paralelização ( multithreading em vários núcleos de processador , instruções SIMD ). O AMP deve, portanto, criar uma camada de abstração completa entre um algoritmo e o equipamento de hardware do computador em execução. Além disso, a restrição a algumas novas construções de linguagem C ++ e algumas novas classes de biblioteca deve reduzir os obstáculos anteriores e os esforços no desenvolvimento de algoritmos paralelos. O DirectX 11 já é nativamente suportado por hardware por todas as séries de GPU comuns (mais recentes que a introdução do DirectX 11) (incluindo GPUs de desempenho básico, como GPUs integradas ao chipset da Intel ), mas o DirectX 11 só foi introduzido com Windows 7 e fornecido para Windows Vista apenas , para que os sistemas operacionais Windows mais antigos não possam ser usados ​​com AMP. Se o C ++ AMP será adaptado por outras plataformas ou ambientes de desenvolvimento C ++ fora do mundo do Windows, ainda está completamente em aberto.

Uma abordagem mais recente é o OpenACC , que, como o OpenMP, é controlado por meio de pragmas de compilador. Código-fonte comum, por exemplo B. em C ++, paralelizado automaticamente porque certos pragmas do compilador, como "#pragma acc parallel", são colocados na frente dos loops for formulados em série. O esforço de transferência é relativamente pequeno. No entanto, a paralelização automática nem sempre leva a soluções ideais. O OpenACC, portanto, nunca pode substituir completamente a programação paralela explícita como no OpenCL. No entanto, em muitos casos, vale a pena ser capaz de obter altos fatores de aceleração no GPGPU dessa maneira simples. OpenACC é suportado por compiladores comerciais como PGI e compiladores gratuitos como GNU Compiler Collection .

Para executar programas em uma GPU, você precisa de um programa host que controle o fluxo de informações. Normalmente, o código GPGPU formulado em uma linguagem semelhante ao C é compilado em tempo de execução na instrução do programa host e enviado ao processador gráfico para processamento posterior, que então retorna os dados calculados para o programa host.

Veja também

literatura

  • Matt Pharr: GPU Gems 2 . Addison-Wesley Publishing Company, 2005, ISBN 0-321-33559-7 , Parte IV - General-Purpose Computation on GPUs: A Primer.
  • David B. Kirk: Programando processadores massivamente paralelos: uma abordagem prática [brochura] . Morgan Kaufmann, 2010, ISBN 978-0-12-381472-2 .

Links da web