Categoria: Parallel Computing


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

Hello fellas.

Recentemente um grupo de cientistas da universidade de San Diego venceu uma competição de ordenação de dados. Isso mesmo ordenação! Pelo que entendi na notícia existem diversas modalidades da competição. A novidade está no fato dos vencedores terem conseguido ordenar 1 terabyte em um minuto (novo recorde) e a segunda conquista: eles bateram o recorde de ‘taxa de ordenação’, onde ordenaram um conjunto de um trilhão de registros em 172 minutos e usando apenas um quarto dos recursos utilizado pelo antigo recordista!! ufa heavy duty!

Vale a pena dar uma lida Scientists break terabyte sorting barrier

[]‘s JT

A programação paralela utilizando placas gráficas tem se tornando cada vez mais comum. A maioria dos PCs já vem de fábrica equipados com GPUs com 8, 16, 32… 128 núcleos, até mesmo notebooks já possuem dezenas deles.

Para tornar as coisas ainda mais fáceis, o programador não precisa aprender uma linguagem de programação “exotérica” para aproveitar o potêncial destas placas.  Um exemplo destas linguagens é o CUDA utilizado para programar placas da NVIDIA.

Como já mencionei a programação paralela e a “supercomputação” já não é mais restrita a um grupo de pesquisadores ou indústrias e o potêncial destas placas já está sendo utilizado para resolver problemas de diversas áreas…

Um exemplo intrigante de como as placas gráficas estão sendo utilizadas é o que mencionei no título do post. Com a possibilidade de criar centenas, milhares, milhões de threads em uma GPU, torna-se possível explorar até mesmo as alternativas mais simples (em termos de algoritmo) para se quebrar uma senha. E até mesmo as não tão simples…

Para quem se interessar mais sobre o assunto, este link [1] aponta para uma notícia sobre um projeto de um grupo da “Georgia Tech – USA” que atualmente estão empenhados em quebrar senhas “MD5″ e conseguindo resultados interessantes.

Para se ter o “gostinho” do que há por vir:

“Atualmente nos podemos dizer com certeza que uma senha com sete caracteres é inadequada – e a medida que o poder computacional das GPUS continua a aumentar ano após ano, esta ameaça continuará a aumentar.” [1]

“Para fazer um contraste, no ano de 2000 o supercomputador mais rápido, um cluster custanto em torno de $110 milhões, operava próximo a sete teraflops.” — Atualmente uma placa gráfica pode operar próximo a 2 teraflops. [1]

Mas como comentei, até mesmo alternativas simples como criar a permutação de um conjunto de letras e criptografa-la utilizando MD5 (ou outro) e então comparar com a senha original torna-se viável até um certo comprimento de senha.

Espero que tenham achado interessante como eu achei.

Abraço, JT.

[1] http://www.gtri.gatech.edu/casestudy/Teraflop-Troubles-Power-Graphics-Processing-Units-GPUs-Password-Security-System

Olá.

Uma dúvida que muita gente tem é: o que é um core? o que significa dual-core, quad-core? Tentarei descrever em termos simples o que isto significa e o que eles implicam. Resumidamente um core (ou núcleo em português) é um dispositivo que é capaz de executar instruções, em termos gerais estas instruções são o código dos programas. Naturalmente os computadores já são capazes de executar diversos programas “ao mesmo tempo”, o que eles fazem é alternar a execução entre um programa e outro de forma muito rápida inperceptivel ao usuário o que faz parecer que os programas estão executando todos ao mesmo tempo.

Se o computador possuir mais de um núcleo ai sim é possível ao processador executar mais de um programa ao mesmo tempo, cada programa (processo/thread) poderá executar em um core diferente, o que torna o desempenho maior. Alguns programas são construídos de forma a utilizar os dois cores simultaneamente, ou seja um mesmo programa executando em mais de um núcleo…

Veja que não estamos falando de “Core 2″, mas sim de dual-core, quad-core. O termo Core 2 refere-se a uma nova linha de processadores da intel [3], dessa forma core e core 2 não são a mesma coisa e não precisam andar sempre juntos, existem por exemplo processadores da AMD que possuem mais de um core, ex: Athlon 64 x2.

Veja estes links para mais detalhes:

[1] O que é dual-core

[2] A plataforma core

[3] Core 2

[]‘s JT.

__global__ olá();

As placas gráficas e os computadores multicore estão se tornando cada vez mais comum, como consequência a busca por cursos/tutorial/* de programação paralela também. A universidade de illinois é conhecida internacionalmente pelo seu “Universal Parallel Computing Research Center” [1], este centro promove anualmente um curso de programação para multicore [2].

Este é o segundo ano que o curso é ministrado durante o verão e neste ano contou com aproximadamente 150 participantes presenciais ou online [3]. Eu tive a oportunidade de ser um destes alunos “virtuais”. Pessoas de diversas partes dos estados unidos e do mundo viajaram para illinois para fazer este curso. O conteúdo do curso não é avançado, o aluno que participa do curso adquire uma boa compreenção dos fundamentos da computação paralela e das diversas tecnologias existestentes. Durante a semana de curso alguns trabalhos práticos são atribuidos e mesmo os alunos “virtuais” podem (devem) faze-los. Você pode se conectar nos servidores do centro de pesquisa ou baixar a imagem de um S.O já com tudo configurado.

Os alunos “virtuais” acompanham as palestras via streaming e teem acesso a praticamente os mesmos recursos que os alunos presenciais, até onde percebi a unica diferenção é o contato direto com os palestrantes. O curso não dá certificado, em conversa por e-mail com o coordenador do curso ele disse que não é possível dar certificado porquê não é possível garantir que o aluno tenha realmente assistido as palestras…

Os temas/palestras que foram abordados este ano juntamente com os palestrantes foram:

Introduction to Parallelism and Multicore Technology – Marc Snir

Parallelism with Java – Danny Dig

Shared Memory Control Parallelism with TBB – Clay Breshears

GPU Programming – Wen-mei Hwu

Taxonomy of Parallel Programming Models- Marc Snir

VS2010: using C++ Concurrency Runtime – Phil Pennington

Esses palestrante são pessoas de renome na área de programação paralela, eles trabalham em empresas como intel, nvidia, AMD, microsoft. Marc Snir foi/é um dos coordenadores do projeto do IBM blue gene.

Por fim, o curso é pago cerca de 70 dólares, mas vale cada centavo investido, fique atento para o próximo ano. Obviamente as palestras são todas em inglês (quem não puder acompanhar ao vivo, pode assistir pelo arquivo no próprio site) e as vagas são limitadas e concorridas.

[]‘s JT.

[1] parallel @ illinois
[2] UPCRC Illinois Summer School on Multicore Programming
[3] Multicore Programming Course has Global Reach

VS2010: using C++ Concurrency Runtime

Excelente material introdutório sobre computação paralela, dá uma visão bem geral do assunto de forma clara e objetiva.

Author: Blaise Barney, Lawrence Livermore National Laboratory

Abstract:
This tutorial covers the very basics of parallel computing, and is intended for someone who is just becoming acquainted with the subject. It begins with a brief overview, including concepts and terminology associated with parallel computing. The topics of parallel memory architectures and programming models are then explored. These topics are followed by a discussion on a number of issues related to designing parallel programs. The tutorial concludes with several examples of how to parallelize simple serial programs.

Level/Prerequisites: None

Link: https://computing.llnl.gov/tutorials/parallel_comp/

See you soon. ;-)

Todos estes termos são comuns no contexto de computação paralela. Utilizamos eles freqüentemente para descrever o quão bom são nossos algoritmos e aplicações paralelas. Neste post vou dar a definição do que cada um significa.

Performance (Desempenho) é um termo utilizado para se referir a o tempo total de execução de um programa. Quando menor for o tempo de execução, maior é o desempenho.

Speedup é uma medida para a performance (Desempenho). Para ser calculada deve ser ter o tempo de execução do programa paralelo e do programa serial (performance). O speedup pode então ser calculado usando esta equação:

Speedup = Desempenho seqüencial / Desempenho paralelo

Eficiencia está medida proporciona uma indicação da utilização efetiva dos processadores. Quando mais próximo de um for o seu valor melhor será. Se o valor for abaixo de 1, indica que cada processador esta sendo sub-utilizado e se for acima de um indica que o problema talvez possa ser decomposto de uma forma mais eficiente utilizando mais processadores.

Escalabilidade” é um atributo que se refere ao speedup de um algoritmo dado um número diferente de elementos de processamento. A eficiência é um bom atributo para se medir a escalabilidade, se a eficiencia permanecer constante a medida que o número de processadores muda, temos uma escala linear de eficiência. Ou seja quanto mais processadores usarmos, maior será a eficiência.

Adaptado de: http://blogs.msdn.com/pfxteam/archive/2010/01/19/9950541.aspx

Em outras palavras: porquê o speedup que obtive paralelizando a aplicação não foi proporcional a quantidade de elementos de processamento?

Eu vou estar regularmente traduzindo/adaptando alguns textos que acho interessante compartilhar com o pessoal, o texto que estou postando hoje é relativo a uma dúvida que muitos novatos na área de computação paralela tem, e como eu também sou novato tive que ir atrás de algumas respostas…

Porquê meu código paralelo roda mais lento que o serial?

Isso tipicamente é causado por duas coisas:

1. Custo sequencial. É frequente que parte do algoritmo que foi implementado é por natureza sequêncial, como consequência o código em execução possui partes sequenciais. Neste caso, quanto mais rápido for as partes paralelas do código, mais o efeito da parte sequêncial será percebida, está é a lei de Amdahl.

2. Sobrecargas diversas. Outros custos de performance incluem o processamento gasto em dividir/reunir os dados, agendar as tarefas, sincronização, comunicação.

O primeiro caso pode ser tratado utilizando um algoritmo que tenha uma natureza mais paralela. O segundo caso pode ser em parte atenuado reduzindo a comunicação entre tarefas, atacando o problema de uma forma diferente, etc.

Este post é uma adaptação de um texto deste site: http://blogs.msdn.com/pfxteam/archive/2010/01/05/9944172.aspx

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

Obtenha todo post novo entregue na sua caixa de entrada.