Trabalho sobre GPU
Por: Sara • 31/10/2018 • 1.709 Palavras (7 Páginas) • 313 Visualizações
...
- Chip g80 e cuda
Diferentemente das tecnologias anteriores da NVIDIA, como a G70, a G80 possui agora os stream processors, que são unidades de pontos flutuantes programáveis [10]. O G80 passou a suportar a linguagem C, permitindo os programadores utilizar todo o poder da GPU, sem a necessidade de aprender uma nova linguagem e fazer adaptações complexas em seus algoritmos [8].
[pic 1]
Fig 1.
O G80 também introduziu uma tecnologia em que todos os threads compartilham do mesmo espaço de memória[7].
Os threads blocks são lotes de threads onde eles trabalham sincronizando suas ações, assim compartilhando o acesso a memória sem risco, eficientemente compartilhando dados através de um compartilhamento de memória de baixa latência [7].
O G80 também foi a primeira GPU a trabalhar com um processador escalar (processador que realiza cálculos em velocidades muito elevadas e que trabalha apenas com valores escalares) [7].
CUDA (Compute Unified Device Architecture)
É uma arquitetura de hardware e software, que cria um ambiente de programação, onde possibilita as GPUs executarem programas escritos em linguagens de programação de alto-nível, principalmente, o C, outras linguagens também são suportadas, como o Fortran, OpenCL e outras linguagens.
O CUDA kernel (Nesse caso, o kernel é apenas o nome dado as funções que executam na GPU) executa através de um conjunto paralelo de threads, cada thread possui um ID, que é utilizado para guardar o endereço de memória e tomar decisões de controle [11]. O compilador ou até mesmo o programador, organiza os threads em blocos de threads posteriormente em uma grade de blocos, a GPU chama o kernel em uma grade de blocos de threads, singularmente os threads dentro dos blocos executam a chamada do kernel [11]. Um bloco de threads é um conjunto de threads que trabalham ao mesmo tempo, podendo cooperar entre si, utilizando-se da barrier synchronization e da memória compartilhada, cada bloco de thread também possui um ID dentro da grade [11]. Uma grade é conjunto ordenado de blocos que executa o mesmo kernel, faz leituras de entradas e atribuições de saída na memória global [11]. No modelo de programação CUDA, cada thread tem uma memória privada, cada bloco de thread possui uma memória compartilhada por todo bloco, essa memória é utilizada para fazer comunicação entre os threads, transferir dados e para compartilhar os resultados das operações realizadas. Uma grade compartilha os resultados das operações com a memória global após o sincronizamento global do kernel [11].
- arquitetura e organização interna de uma gpu
Uma GPU é formada por inúmeros processadores, sua plataforma é projetada de forma em que aumente o desempenho do paralelismo. Existe uma abordagem chamada SIMD (single instruction, multiple data) de sistema, em que ao representar sua organização e forma, refere-se à maneira em que os dados são tratados: com uma única instrução realizada no processador, faz com que todos os dados que estão sendo tratados em determinado instante no processador, sejam tratados da mesma maneira [5]. Com isso, o aumento da eficiência no processamento.
O microprocessador Kepler GK110 da NVIDIA obtém a arquitetura com maior nível em complexidade e performance já alcançado [5]. Existem as unidades de processamento gráfico, ao qual são compostas por processadores de streaming (SMXs), elas contam com um núcleo de processamento de precisão única, e são completamente pipeline. Cada processador de streaming contém 192 núcleos CUDA, 8 despachadores, cache de instruções, quatro agendadores de Warp, 16 unidades de filtros de textura e cache de memória nível 1 de 64KB. [5]
- sucinto histórico da computação com gpu
É conveniente entender a evolução desde os primeiros pipelines gráficos até os modernos modelos de programação conhecidos atualmente.
Nas décadas de 80 e 90, existiu a predominância de hardware gráfico configurável mas não programável. Nesse tempo, as funções fixas eram de grande utilidade e as interfaces de programação de aplicação tornaram-se renomadas. Destacam-se o DirectX da Microsoft¹ e o OpenGL, um padrão aberto com suporte para uma grande quantidade de fabricantes[55]. Percebe-se que ao decorrer desta fase, a interface para o host recebia comandos da API gráfica, e dados vindos da CPU. Ao decorrer das duas décadas, cada geração de hardware havia gerado uma melhoria nos diferentes estágios do pipeline gráfico. Porém a evolução não conseguia seguir as demandas para os programadores com maior aprimoração[56].
No momento que surgiram os mecanismos de programação para GPU, pesquisadores buscaram métodos para o auxílio na utilização desse hardware gráfico, no processamento e soluções de problemas de condições diferentes de gráficas. A princípio as únicas formas para o desenvolvimento de aplicações de utilização gráficas existia por meio das APIs gráficas padrões, pesquisadores exploraram a computação com o propósito da não utilização gráfica, com a aparência de que fossem programadas com uma renderização gráfica tradicional para a GPU [57].
Em meados do século XXI, pesquisadores perceberam que as GPUs foram projetadas para a produção de uma cor para cada pixel, composto na tela como resultados nas operações compostos sobre valores de entrada. Assim, observaram nos dados de entrada que eram parâmetros produzidos por programados, as cores que eram produzidas poderiam ser qualquer tipo de dado.
No entanto, os resultados eram satisfatórios, mas este modelo de programação era bastante limitado. Além de haver inaptidão nos cálculos de pontos flutuantes de algumas GPUs, quando o programa falhava ou trazia resultados incorretos, não existia procedimento eficiente para verificar como o código estava executando no momento. Outro obstáculo, seria a dificuldade na criação de aplicações, o pesquisador deveria aprender OpenGL ou DirectX [57].
- conclusão
Neste trabalho foi apresentado a diferença entre as técnicas de pipelines e pipeline gráfica. Foi discutido um breve histórico e a arquitetura das GPUs. Mencionado sobre a CUDA (Compute
...