Slides do primeiro dia do Workshop (intensivo :) ) sobre Introdução à Programação de Dispositivos Móveis (Google Android, Apple iPhone, iPod Touch e iPad)
Slides do primeiro dia do Workshop (intensivo :) ) sobre Introdução à Programação de Dispositivos Móveis (Google Android, Apple iPhone, iPod Touch e iPad)
Décima primeira aula de Lógica de Programação da turma de Técnico em Informática para Internet, do curso Pronatec/UNIMEP, realizada no segundo semestre de 2014.
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Eduardo de Lucena Falcão
Abstract. Operations of matrix multiplications are widely used in scientific applications, and commonly have huge dimensions. Another problem derived of the first it’s the matrix-chain multiplications, which also has scientific applicability. Thus, efficient algorithms for matrix multiplications (or matrix-chains) are extremely useful, as also are new approaches or even distributed versions of already known algorithms. The present work aims at analyzing some approaches for the solution of the matrix-chain multiplications problem, implement it and measure their runtime to analyse the efficacy of the same.
Décima primeira aula de Lógica de Programação da turma de Técnico em Informática para Internet, do curso Pronatec/UNIMEP, realizada no segundo semestre de 2014.
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Eduardo de Lucena Falcão
Abstract. Operations of matrix multiplications are widely used in scientific applications, and commonly have huge dimensions. Another problem derived of the first it’s the matrix-chain multiplications, which also has scientific applicability. Thus, efficient algorithms for matrix multiplications (or matrix-chains) are extremely useful, as also are new approaches or even distributed versions of already known algorithms. The present work aims at analyzing some approaches for the solution of the matrix-chain multiplications problem, implement it and measure their runtime to analyse the efficacy of the same.
Com o avanço tecnológico, as formas de computação que visam a melhoria no desempenho dos algoritmos vêm sendo aprimoradas, um dos objetivos é a melhor utilização dos recursos de hardware cada vez mais acessíveis, obtendo ganho de tempo de processamento.
Algumas dessas soluções são baseadas em arquiteturas com memória compartilhada. Isso possibilita novos métodos de paralelismo e clusterização, o que viabiliza a análise de uma quantidade de dados cada vez maior em menos tempo.
Os experimentos com o OpenMP utilizaram as configurações de execução..
com schedule:
Static
Dynamic
Guided
e Oversub com:
2 cores
4 cores
Gave a talk at StartCon about the future of Growth. I touch on viral marketing / referral marketing, fake news and social media, and marketplaces. Finally, the slides go through future technology platforms and how things might evolve there.
The Six Highest Performing B2B Blog Post FormatsBarry Feldman
If your B2B blogging goals include earning social media shares and backlinks to boost your search rankings, this infographic lists the size best approaches.
Each technological age has been marked by a shift in how the industrial platform enables companies to rethink their business processes and create wealth. In the talk I argue that we are limiting our view of what this next industrial/digital age can offer because of how we read, measure and through that perceive the world (how we cherry pick data). Companies are locked in metrics and quantitative measures, data that can fit into a spreadsheet. And by that they see the digital transformation merely as an efficiency tool to the fossil fuel age. But we need to stretch further…
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
How can a digital marketing consultant help your business? In this resource we'll count the ways. 24 additional marketing resources are bundled for free.
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
Slides (melhorados) da webminar (palestra online) que ministrei no LabDeGaragem.com na terça-feira dia 16/08/2011.
A palestra abordou aspectos introdutórios da linguagem e mostrou através de exemplos práticos onde a linguagem pode ser utilizada a favor da produtividade do desenvolvedor.
Este foi o ebook produzido para a iniciação de pessoas na programação, por meio da linguagem JavaScript.
Nesse material são abordadas questões de algoritmos que vão lhe dar a base necessária para ser um programador.
Para aprender a programar você pode usar qualquer linguagem. Porém trago o JavaScript por ter um diferencial absurdo em termos de aprendizagem. Veja o material e entenda melhor o motivo.
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
Objetivo: Mostrar a importância da estruturação de firmware durante o ciclo de desenvolvimento de um produto.
Neste webinar abordaremos um pouco do ciclo de desenvolvimento de um produto e técnicas de programação que vão garantir a portabilidade, reuso e testabilidade de bibliotecas.
Link: https://www.embarcados.com.br/webinars/webinar-arquitetura-de-software-para-sistemas-embarcados/
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
1. Mini Curso: Programação Paralela
utilizando OpenMP
Arthur F. Lorenzon
Antonio Carlos S. B. F.
Henrique O. Gressler
Márcia C. Cera
2. 2
Quem somos...
● Arthur Francisco Lorenzon:
● Bacharel em CC pela UNIPAMPA
● Aluno do PPGC/UFRGS
● Integrante do Laboratório de Sistemas Embarcados – UFRGS
● Henrique de Oliveira Gressler
● Márcia Cristina Cera
● Antonio Carlos S. B. Filho
3. 3
Quem somos...
● Arthur Francisco Lorenzon
● Henrique de Oliveira Gressler:
● Bacharel em Ciência da Computação pela UNIPAMPA
● Márcia Cristina Cera
● Antonio Carlos S. B. Filho
4. 4
Quem somos...
● Arthur Francisco Lorenzon
● Henrique de Oliveira Gressler
● Márcia Cristina Cera:
● Doutorado em Computação pela UFRGS
● Professora Adjunta da UNIPAMPA
● Pesquisadora da área de PPD
● Antonio Carlos S. B. Filho
5. 5
Quem somos...
● Arthur Francisco Lorenzon
● Henrique de Oliveira Gressler
● Márcia Cristina Cera
● Antonio Carlos S. B. Filho:
● Pós-Doutorado em Computação – UFRGS
● Professor Adjunto da UFRGS
● Bolsista de Produtividade em Pesquisa do CNPq – Nível 2
6. 6
Experiência dos Palestrantes...
● Diversas aplicações paralelizadas utilizando OpenMP
● Diversos trabalhos publicados utilizando OpenMP
● Participação em eventos/grupos de pesquisa:
● Maratona de Programação Paralela – Petrópolis/RJ 2012
● Grupo de Estudos para Maratonas de Prog. Paralela – GEMPP
● Trabalho de Conclusão de Curso
7. 7
Objetivos deste Mini-Curso
● Programação Paralela
● Técnicas de Programação Paralela com OpenMP
● Teoria
● Prática
● Desafios Futuros para a área de PPD
8. 8
Roteiro
● Evolução dos Microprocessadores
● Cenário Atual
● Programar Paralelo, Porque? Onde? Como?
● OpenMP:
● Noções Básicas
● Paralelismo de Laços
● Paralelismo de Seções
● Diretivas de Sincronização
● Desafios Futuros
15. 15
Arquiteturas Multi-Core
● De forma simplificada um processador multi-core é colocar dois
ou mais processadores num mesmo processador/chip.
● Trabalho de processsamento ficará dividido entre os cores.
CPU 0 CPU 1
16. 16
Arquiteturas Multi-Core
● De forma simplificada um processador multi-core é colocar dois
ou mais processadores num mesmo processador/chip.
● Trabalho de processsamento ficará dividido entre os cores.
CPU 0 CPU 1
17. 17
Arquiteturas Multi-Core
● De forma simplificada um processador multi-core é colocar dois
ou mais processadores num mesmo processador/chip.
● Trabalho de processsamento ficará dividido entre os cores.
CPU 0 CPU 1
19. 19
O que paralelizar?
● Previsão do tempo e do clima
● Cálculos matemáticos
● Processamento de imagens
● Simuladores
● Componentes de Jogos*
20. 20
Porque Paralelizar?
● Processamento simultâneo de diversas tarefas
● Melhorar aproveitamento do hardware – ciclos ociosos
● Aumentar o desempenho da CPU
● Aplicações mais rápidas e eficientes – Redução do tempo de
computação
24. 24
Identificando Oportunidades de Paralelismo
● Estudar a aplicação:
● Tempo de execução
● Ferramentas de geração de profile
● Avaliar potênciais funções e loops
● Identificar tarefas que possam ser executadas concorrentemente
● Definir a maneira mais eficiente de paraleliza-lá
● Obter um código paralelo ideal pode levar horas, dias,
semanas e até meses
25. 25
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
26. 26
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
3060 s
27. 27
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
3060 s
1530 s 1560 s
Quanto tempo levarão dois pintores?
28. 28
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
3060 s
1530 s 1560 s
Quanto tempo levarão dois pintores?
29. 29
Exemplo
● Sempre existirão partes sequenciais em um programa!
1. Preparar a tinta
2. Pintar 300 estacas
3. Aguardar tinta secar
Região Paralela
Região Sequencial
Região Sequencial
30. 30
Exemplo
● Sempre existirão partes sequenciais em um programa!
1. Preparar a tinta
2. Pintar 300 estacas
3. Aguardar tinta secar
Região Paralela
Região Sequencial
Região Sequencial
Pintar 150
Secar a tinta
Preparar a tinta
Pintar 150
Pintar 300
Secar a tinta
Preparar a tinta
Tempo
Sequencial:
Tempo
Paralelo:
32. 32
● Open Multi-Processing
● Teve início por volta de 1997
● Padrão que define como os compiladores devem gerar códigos
paralelos através de diretivas e funções. (Não é linguagem!)
● Disponível para Fortran 77, Fortran 90, C e C++
● Baseia-se na criação de várias threads que compartilham o mesmo
recurso de memória
● Regiões Privadas
● Regiões Compartilhadas
Noções Básicas de OpenMP
33. 33
● Open Multi-Processing
● Teve início por volta de 1997
● Padrão que define como os compiladores devem gerar códigos
paralelos através de diretivas e funções. (Não é linguagem!)
● Disponível para Fortran 77, Fortran 90, C e C++
● Baseia-se na criação de várias threads que compartilham o mesmo
recurso de memória
● Regiões Privadas
● Regiões Compartilhadas
Noções Básicas de OpenMP
34. 34
● Facilidade de conversão de programas seqüenciais em paralelos
● Fácil compreensão e uso das diretivas
● Minimiza a interferência na estrutura do algoritmo
● Compila e executa em ambientes paralelo e sequencial
● Maneira simples de explorar o paralelismo
Noções Básicas de OpenMP
35. 35
● Facilidade de conversão de programas seqüenciais em paralelos
● Fácil compreensão e uso das diretivas
● Minimiza a interferência na estrutura do algoritmo
● Compila e executa em ambientes paralelo e sequencial
● Maneira simples de explorar o paralelismo
Noções Básicas de OpenMP
!!! CUIDADO !!!
OpenMP é simples, mas demanda conhecimento:
- Aplicação
- Arquitetura
- Melhor “opção” de paralelismo
38. 38
● Consiste em uma linha de código com significado especial para o
compilador.
● Identificadas pelo #pragma omp
● Formato padrão:
#pragma omp nome_diretiva [cláusula,...] novaLinha
● Inclusão header: “omp.h”
Diretivas de Compilação
Construtor Paralelo
Construtores de Compartilhamento de Trabalho
Diretivas de Sincronização
39. 39
● Diretiva mais importante do OpenMP
● Informa ao compilador a área que deverá ser executada em paralelo
Construtor Paralelo
#include <omp.h>
int main(){
#pragma omp parallel{
printf(“Ola Mundon”);
}
}
if, private, shared,
firstprivate, default,
copyin, reduction
num_threads
41. 41
● Exemplos:
● www.inf.ufrgs.br/~aflorenzon/curso_OpenMP/
● gcc nome_programa.c -o nome_saida -fopenmp
● hello.c e exemplo1.c
Construtor Paralelo
#include <omp.h>
int main(){
#pragma omp parallel
{
for(i=0;i<n;i++)
a[i] = b[i]+c[i];
}
}
O que há de errado com
o código ao lado?
42. 42
● Exemplos:
● www.inf.ufrgs.br/~aflorenzon/curso_OpenMP/
● gcc nome_programa.c -o nome_saida -fopenmp
● hello.c e exemplo1.c
Construtor Paralelo
#include <omp.h>
int main(){
#pragma omp parallel
{
for(i=0;i<n;i++)
a[i] = b[i]+c[i];
}
}
O que há de errado com
o código ao lado?
Variáveis compartilhadas
entre todas as
threads, por padrão!
43. 43
● Exemplos:
● www.inf.ufrgs.br/~aflorenzon/curso_OpenMP/
● gcc nome_programa.c -o nome_saida -fopenmp
● hello.c e exemplo1.c
Construtor Paralelo
#include <omp.h>
int main(){
#pragma omp parallel private(i)
{
for(i=0;i<n;i++)
a[i] = b[i]+c[i];
}
}
Variáveis de controle
de laço devem ser
privadas à cada thread!
44. 44
● Construtor de Compartilhamento de Trabalho:
● Responsáveis pela distribuição de trabalho entre as threads e
determinam como o trabalho será dividido entre as threads.
● Necessariamente interna a uma região paralela.
#pragma omp construtor[clausula [clausula] …]
– #pragma omp for
– #pragma omp sections
– #pragma omp single
Construtor Paralelo
45. 45
● #pragma omp for
– Iterações dos laços for são executadas em paralelo.
– Número de iterações deve ser previamente conhecido e não
possui variação durante a execução – (while).
– Implementa SIMD (Single Instruction Multiple Data).
Construtor de Trabalho
46. 46
● #pragma omp for
– Iterações dos laços for são executadas em paralelo.
– Número de iterações deve ser previamente conhecido e não
possui variação durante a execução – (while).
– Implementa SIMD (Single Instruction Multiple Data).
Construtor de Trabalho
#include <omp.h>
int main(){
#pragma omp parallel private(i)
{
#pragma omp for
for(i=0;i<n;i++)
a[i] = b[i]+c[i];
}
}
Ex: ex_omp_for_1.c
47. 47
● #pragma omp for
– Schedulers alteram a forma como as iterações do loop são distribuídas
entre as threads
– #pragma omp for schedule (name_schedule, chunk)
– Guided, Dynamic, Static and Runtime
Construtor de Trabalho
49. 49
Intervalo
● Nos vemos novamente as 21:00 hs para a segunda etapa do curso!
● OpenMP Sections
● Diretivas de Sincronização
● Desafios Futuros
● Considerações Finais
50. 50
● #pragma omp sections
– Utilizado para dividir tarefas entre as threads em blocos de
códigos que não possuem iterações.
Construtor de Trabalho
#include <omp.h>
int main(){
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
instrução
#pragma omp section
instruçao
}
}
}
51. 51
● #pragma omp sections
– Utilizado para dividir tarefas entre as threads em blocos de
códigos que não possuem iterações.
Construtor de Trabalho
#include <omp.h>
int main(){
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
instrução
#pragma omp section
instruçao
}
}
}
Região paralela
Indica que cada thread
irá executar um bloco
de instruções diferentes
Qual instrução que cada
thread irá executar
Fim região paralela
52. 52
● #pragma omp sections
– Manter coerência entre número de blocos x número de threads
– Mais blocos → algumas threads irão executar mais de um bloco
– Mais threads → algumas threads ficarão ociosas
– Apenas uma thread → execução seqüencial
– Implementa MIMD (Multiple Instructions Multiple Data)
Construtor de Trabalho
Serial Paralelo
55. 55
● #pragma omp single
● Trecho de código será executado apenas por uma thread
● Demais threads aguardam em uma barreira implícita
Construtor de Trabalho
#include <omp.h>
int main(){
#pragma omp parallel
{
#pragma omp single
printf(“Inicio região paralelan”);
#pragma omp for
…
}
}
56. 56
● Primeiro devemos entender o que são “condições de corrida”
● Quando duas ou mais threads tentam atualizar, ao mesmo tempo,
uma mesma variável
● Quando uma thread atualiza uma variável e outra acesso o valor ao
mesmo tempo
● Quando isto acontece, o resultado tende a ser incorreto!
Diretivas de Sincronização
57. 57
● Primeiro devemos entender o que são “condições de corrida”
● Quando duas ou mais threads tentam atualizar, ao mesmo tempo,
uma mesma variável
● Quando uma thread atualiza uma variável e outra acesso o valor ao
mesmo tempo
● Quando isto acontece, o resultado tende a ser incorreto!
Diretivas de Sincronização
Diretivas de sincronização garantem que o
acesso ou atualização de uma determinada variável
Compartilhada aconteça no momento certo
58. 58
● Construtores:
● Critical:
– Restringe a execução de uma determinada tarefa a apenas uma thread
por vez
● Atomic
● Barrier
Diretivas de Sincronização
59. 59
● Construtores:
● Critical:
– Restringe a execução de uma determinada tarefa a apenas uma thread
por vez
● Atomic:
– Um local específico da memória deve ser atualizado atomicamente, ao
invés de deixar várias threads tentarem escrever nele
– Em essência, esta directiva prevê uma seção mini-critical.
● Barrier
Diretivas de Sincronização
60. 60
● Construtores:
● Critical
● Atomic
● Barrier:
– Utilizada para sincronizar todas as threads em um determinado ponto
do código
Diretivas de Sincronização
61. 61
● Classificadas em:
● Funções de ambiente de execução
● Funções de bloqueio
● Funções de tempo
Funções de Interface
62. 62
● Paralelismo utilizando tasks!
● Utilizado para paralelizar algoritmos irregulares:
● Recursividade
● Repetições utilizando While
● Exemplos de aplicações:
● Algoritmos de ordenação → Merge sort, Quick sort...
● Manipulação de ponteiros → Listas
OpenMP Avançado
63. 63
● #pragma omp task
● Interna a uma região paralela
● Thread que executar o #pragma omp task criará uma nova task
OpenMP Avançado
#include <omp.h>
int main(){
#pragma omp parallel
{
#pragma omp single nowait
sort();
}
}
void sort(){
….
for(i=0;i<N;i++){
#pragma omp task
sort();
}
}
64. 64
● Poderosa API de programação paralela
● Fácil implementação
● Pouca modificação do código sequencial
● Bastante utilizada para computação hibrida (MPI + OpenMP)
Resumo OpenMP