Arquivo de etiquetas: GPGPU


Programmers with little or no exposure to parallelism have an opportunity to learn about multicore programming at the UPCRC Illinois Summer School to be held July 25-29, 2011 at the University of Illinois at Urbana-Champaign.

The week-long, intensive workshop will provide a solid foundation in the fundamentals of multicore programming, offer hands-on experience with the use of multicore languages and libraries, and introduce emerging research topics. Upon completion, participants will be equipped to choose the best multicore programming model for current and future projects.

Prerequisites for the summer school include solid programming experience (C, C++, C# or Java languages) and a demonstrated interest in applying multicore programming to academic or professional pursuits.

For more information about the summer school, visit the website at http://www.upcrc.illinois.edu/summer/2011/index.html.

 

Cheri Helregel, Outreach Coordinator
UPCRC Illinois
University of Illinois at Urbana-Champaign
Ph: (217) 244-6097
url | www.upcrc.illinois.edu

 

No período de 18 a 22 de setembro ocorreu na Universidade Federal de Goiás (UFG) o minicurso “Programação CUDA”. O minicurso, com carga horária de 10 horas, teve como objetivo possibilitar ao aluno ter conhecimentos gerais sobre programação paralela, e seu uso no contexto de placas aceleradoras usando programação CUDA. O curso ocorreu como parte das atividades do Conpeex (Congresso de Pesquisa, Ensino e Extensão) da UFG, e teve grande procura (102 inscritos), com participação média de cerca de sessenta pessoas, entre alunos da UFG, e de outras instituições, além de profissionais da área.

Ementa do curso:

Introdução à computação paralela e evolução das arquiteturas de computadores. Visão geral da arquitetura CUDA e sua linguagem de programação: gerenciamento de memória, código paralelo (kernel) e sua execução, coordenação de atividades entre CPU e GPU, recursos de desenvolvimento, memória compartilhada e sincronização. Visão geral de técnicas de otimização: a arquitetura CUDA, memória, configuração de execução, instruções. Aplicações usando CUDA e perspectivas futuras.

Sobre os instrutores:

Wellington S. Martins: concluiu o doutorado (PhD) em Ciência da Computação na University of East Anglia (Inglaterra). Obteve o título de Mestre em Sistemas de Computação pela Pontifícia Universidade Católica do Rio de Janeiro. Atualmente é professor no Instituto de Informática da Universidade Federal de Goiás. Suas áreas de interesse incluem: computação paralela e distribuída, análise e projeto de algoritmos, mineração de dados, e biologia computacional.

Divino César S. Lucas é estudante do último período de Ciência da Computação da PUC-GO. Faz pesquisa nas áreas de Programação Paralela, Bioinformática e Metaheurísticas. Competidor da maratona de programação ACM-ICPC.

O material utilizado nas aulas já está disponível no site do curso: http://inf.ufg.br/gpu

O advento das CPUs multicore e das GPUs manycores significa que o caminho para desenvolvimento de novos processadores são sistemas paralelos. Além disso o paralelismo obtido com estes chips continuam com a evolução prevista pela lei de Moore [6]. O desafio agora é desenvolver softwares que consigam utilizar de forma eficiente o número de cores disponíveis no sistema e que a performance destes acompanhe de forma transparente o aumento do número de nucleos disponíveis. Aplicações com estas caracteristicas já existem na área de jogos, as quais utilizam os recursos disponíveis para manipular imagens de alta resolução e produzir cenas o mais realistas possíveis em frações de segundos.

CUDA é um modelo de programação paralela e um ambiente de software projetado para superar estes desafio enquanto requer uma baixa curva de aprendizado para programadores familiares com linguagens tradicionais como a linguagem C.

CUDA é composta de três abstrações principais, a saber: uma hierarquia de grupo de threads, memorias compartilhadas, sincronização via barreiras – que são expostos para o programador atraves de um conjunto minimo de extenções para a linguagem C.

Estas abstrações possibilitam o paralelismo de dados e threads. Elas levam o programador a particionar o problema em subproblemas que podem ser solucionados independentemente em paralelo e então combinar estas partes para que possam ser trabalhadas cooperativamente. Tão decomposição preserva a expressividade da linguagem e permite que as threads cooperem quando estiverem trabalhando nos subproblemas, e ao mesmo tempo permite uma evolução de performance de forma transparente já que cada subproblema pode ser agendado para ser executado em qualquer um dos núcleos disponíveis: Um programa em CUDA pode portanto executar em qualquer número de núcleos, apenas o sistema de runtime precisa saber quantos núcleos estão disponívei.

GPU: Processador manycore altamente paralelo

Movido pelo insaciavel demanda de mercado por aplicações de tempo real, graficos 3D de alta definição a GPU evoluiu para um processador manycore altamente paralelo com um gigantesco poder de computação e uma grande largura de barramento de memória, como ilustrado pela figura 1.

performancebandwidthFigura 1

A razão por trás da grande diferença de poder de computaçaõ entre a CPU e a GPU é que a GPU é especializada para tarefas de computação intensiva e altamente paralela – exatamente o que renderização gráfica trabalha – e portanto foi projetada de forma que mais transistores são dedicados para processamento ao inves utiliza-los para cache e/ou controle de fluxo, veja a figura 2 para uma representação gráfica.

arquitetura

Figura 2

Mais especificamente, a GPU foi especialmente projetada para resolver problemas que podem ser expressos em termos de computações com diversos dados em paralelo – o mesmo programa é executado para cada elemento de dado em paralelo – e com alta necessidade de aritimetica. Devido ao mesmo programa ser executado para cada porção de dados, existe pouca necessidade de uma unidade de controle de fluxo sofisticada; e porquê ele é exeuctada em diversos dados em paralelos e tem alta requisição para calculos, a latencia de acesso a memória pode ser ocultada com calculos ao inves de caches gigantes.

Processamento de dados em paralelo mapeia a mesma porção de dados para diversas threads ao mesmo tempo. Muitas aplicações que processam grandes quantidades de dados podem utilizar um modelo de programação paralelo para acelerar suas as computações realizadas. Na renderização 3D grandes conjuntos de pixels e vertices são mapeados para threads executando em paralelos. Aplicações de processamento de imagem e video tais como codificação e decoficação de video, redimencionamento de imagem, visão computacional e reconhecimento de padrões, podem mapear blocos de imagens e pixels para threads executando em paralelo. De fato muitos algoritmos fora do campo de processamento de imagem e video estão sendo acelerados pelo processamento de dados em paralelo, desde simulação física e computação finânceira até biologia computacional. Você pode encontrar diversos exemplos de aplicações e o ganho de performance que obtiveram aqui [3].

O modelo de programação CUDA foi projetado para expor todo o potencial de processamento paralelo as GPUs. Existem milhões de GPUs espalhadas por todo o mundo e você mesmo pode estar utilizando uma agora e nem sabe, confira em [4] a lista das placas gráficas que suportam CUDA.

Referências:

1. http://www.nvidia.com.br/object/cuda_home_br.html#
2. http://www-csl.csres.utexas.edu/~billmark/teach/cs395t-06-spring/
3. http://www.nvidia.com.br/object/cuda_develop_br.html
4. http://www.nvidia.com.br/object/cuda_learn_products_br.html
5. http://www.techradar.com/blogs/article/parallel-computing-and-you-496480
6. http://pt.wikipedia.org/wiki/Lei_de_moore
7. http://courses.ece.uiuc.edu/ece498/al1/Syllabus.html
8. http://courses.ece.uiuc.edu/ece498/al1/Archive/Spring2007/Syllabus.html

Blog no WordPress.com. | Tema: Motion até volcanic.
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.