SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
Programação Paralela em Python
      Bibliotecas e Alternativas




            TDC 2010
            Rodrigo Hübner
Vamos discutir...

●   Arquiteturas Computacionais estão se deslocando
para UCP's multicore;
●   Softwares precisam explorar o paralelismo subjacente;
●   Programação multithreading em Python;
●   Bibliotecas existentes...
●   Alternativas;
●   Conclusões.
Exemplo: threading

from threading import Thread

def minha_funcao(argumento):
  print argumento

t = Thread( target = minha_funcao, args = ('algo',))
t.start()
Exemplo: threading

               Problema!

...Python não é totalmente thread-safe...


             O que fazer?
Exemplos: multiprocessing


from multiprocessing import Process

def f(nome):
  print 'Olá', nome

if __name__ == '__main__':
    p = Process(target=f, args=('Rodrigo',))
    p.start()
    p.join()
Exemplos: multiprocessing


from multiprocessing import Process, Queue

def f(q):
  q.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=(q,))
    p.start()
    print q.get() # prints "[42, None, 'hello']"
    p.join()
Exemplo: Parallel Python
import math, sys, time, pp

def sum_primes(n):
  return sum([x for x in xrange(2,n) if isprime(x)])

ppservers = ()

if len(sys.argv) > 1:
    ncpus = int(sys.argv[1])
    job_server = pp.Server(ncpus, ppservers=ppservers)
else:
    job_server = pp.Server(ppservers=ppservers)

job1 = job_server.submit(sum_primes, (100,), (isprime,), ("math",))

result = job1()
start_time = time.time()

inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700)
jobs = [(input, job_server.submit(sum_primes,(input,), (isprime,), ("math",))) for input in inputs]
for input, job in jobs:
   print "Sum of primes below", input, "is", job()

job_server.print_stats()
Parallel Python




      Feio!
Exemplos: MPI for Python


from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()

if rank == 0:
   data = {'a': 7, 'b': 3.14}
   comm.send(data, dest=1, tag=11)
elif rank == 1:
   data = comm.recv(source=0, tag=11)
Alternativas...


●Jython possui um ótimo desempenho usando threads
pois não possui o GIL;

●   MPI está implementada em Python.

●   Criar novos processos a partir de threads em Python;

●Aproveitar padrões existentes criando novos
modelos...
Aplicações de modelos...


● Objetivo é aplicar modelos de programação paralela
que que facilite o trabalho do programador e que
forneça escalabilidade.

●Modelo de programação com fluxos de execução
paralelo implícito – TIRT
O módulo TIRT


●   Cria trabalhadores implícitos;

●   Gerenciamento a cargo do ambiente de execução;

●   Balanceamento de carga (Roubo de Tarefas)

●   Oferece escalabilidade.
TIRT: arquitetura
O módulo TIRT: Implementação


●   Anotação de tarefas usando @decorators;

●   multiprocessing;

●Gerenciar objetos compartilhados utilizando Managers
(multiprocessing);

●   NÃO utilizar pré-processamento!
TIRT: Exemplos
01 from tirt import task, barrier, get_n_cpu, final, init
02                                                          20 @init
03 @task                                                    21 def matrix_stuff():
04 def worker(w):                                           22 # Inicializa a matriz
05 first_row = (w - 1) * HEIGHT + 1                         23
06 last_row = first_row + HEIGHT - 1                        24 if __name__ == "__main__":
07 barrier()                                                25 MAX_ITERS = 100
08 for iters in range(1, MAX_ITERS):                        26 N = 5000
09      for i in range(first_row, last_row):                27 HEIGHT = N / get_n_cpu()
10          # Processa pontos vermelhos                     28 GRID = []
11      barrier()                                           29 matrix_stuff()
12      for i in range(first_row, last_row):                30 for i in range(get_n_cpu()):
13          # Processa pontos pretos                        31       worker(i+1)
14      barrier()                                           32 validate()
15
16 @final
17 def validate():
18 # Faz a validação dos resultados obtidos
FIM



     Obrigado

 ●   Rodrigo Hübner
● rhubner@gmail.com

   ● @rodrigohubner

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem GoAllisson Azevedo
 
Curso de Matlab avancado 1
Curso de Matlab avancado 1Curso de Matlab avancado 1
Curso de Matlab avancado 1Gabriel Costa
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em CCaique Silva
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maplejeandson correa
 
Te cnicas de diferenci acao
Te cnicas de diferenci acaoTe cnicas de diferenci acao
Te cnicas de diferenci acaocalculogrupo
 
Curso de Matlab avancado 2
Curso de Matlab avancado 2Curso de Matlab avancado 2
Curso de Matlab avancado 2Gabriel Costa
 
Revisão - Funções
Revisão - FunçõesRevisão - Funções
Revisão - Funçõesthomasdacosta
 
Apostila de derivadas
Apostila de derivadasApostila de derivadas
Apostila de derivadassmpgiacobbo
 
Imagem de um objecto
Imagem de um objectoImagem de um objecto
Imagem de um objectoPaulo Mutolo
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoGustavo Nazário
 
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...Loiane Groner
 
Python ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowPython ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowFabrício Vargas Matos
 
Transformações nos gráficos de funções 10 ano
Transformações nos gráficos de funções  10 anoTransformações nos gráficos de funções  10 ano
Transformações nos gráficos de funções 10 anoAna Tapadinhas
 
Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividadeMauricio Wieler
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)Pedro Castilho
 

Was ist angesagt? (20)

Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem Go
 
Curso de Matlab avancado 1
Curso de Matlab avancado 1Curso de Matlab avancado 1
Curso de Matlab avancado 1
 
Algoritmos Aula 04
Algoritmos Aula 04Algoritmos Aula 04
Algoritmos Aula 04
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em C
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
 
Te cnicas de diferenci acao
Te cnicas de diferenci acaoTe cnicas de diferenci acao
Te cnicas de diferenci acao
 
Curso de Matlab avancado 2
Curso de Matlab avancado 2Curso de Matlab avancado 2
Curso de Matlab avancado 2
 
Aula 09 08-2013
Aula 09 08-2013Aula 09 08-2013
Aula 09 08-2013
 
Revisão - Funções
Revisão - FunçõesRevisão - Funções
Revisão - Funções
 
Trigonometria PARTE 2
Trigonometria PARTE 2Trigonometria PARTE 2
Trigonometria PARTE 2
 
Apostila de derivadas
Apostila de derivadasApostila de derivadas
Apostila de derivadas
 
Imagem de um objecto
Imagem de um objectoImagem de um objecto
Imagem de um objecto
 
Funcao do 2_grau
Funcao do 2_grauFuncao do 2_grau
Funcao do 2_grau
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
 
Python ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowPython ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao Tensorflow
 
Transformações nos gráficos de funções 10 ano
Transformações nos gráficos de funções  10 anoTransformações nos gráficos de funções  10 ano
Transformações nos gráficos de funções 10 ano
 
Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividade
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)
 
9 structs e ponteiros
9   structs e ponteiros9   structs e ponteiros
9 structs e ponteiros
 

Andere mochten auch

Python no Ensino Superior - PyconBrasil 1
Python no Ensino Superior - PyconBrasil 1Python no Ensino Superior - PyconBrasil 1
Python no Ensino Superior - PyconBrasil 1Marco Mendes
 
Elementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem PythonElementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem PythonCaliane Z. Pecenin
 
Desenvolvimento RAD com Python (Fenasoft)
Desenvolvimento RAD com Python (Fenasoft)Desenvolvimento RAD com Python (Fenasoft)
Desenvolvimento RAD com Python (Fenasoft)Osvaldo Santana Neto
 
Apresentação Python Poli
Apresentação Python PoliApresentação Python Poli
Apresentação Python PoliRodrigo Lira
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python PoliRodrigo Lira
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Reduzindo o Overhead Imposto pela Compilação Dinâmica
Reduzindo o Overhead Imposto pela Compilação DinâmicaReduzindo o Overhead Imposto pela Compilação Dinâmica
Reduzindo o Overhead Imposto pela Compilação DinâmicaRodrigo Hübner
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Sidney Roberto
 
03 programando em python - comandos basicos
 03   programando em python - comandos basicos 03   programando em python - comandos basicos
03 programando em python - comandos basicosVictor Marcelino
 
O poder do Python/Django
O poder do Python/DjangoO poder do Python/Django
O poder do Python/DjangoÁtila Bezerra
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonGiancarlo Silva
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYLucas Furtado de Oliveira
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3Moises de Paula
 
Introdução a programação em python d3 ides
Introdução a programação em python d3  idesIntrodução a programação em python d3  ides
Introdução a programação em python d3 idesMoises de Paula
 
Oficina de Python - Tchelinux Livramento 2013
Oficina de Python - Tchelinux Livramento 2013Oficina de Python - Tchelinux Livramento 2013
Oficina de Python - Tchelinux Livramento 2013Jerônimo Medina Madruga
 

Andere mochten auch (20)

M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Introdução ao Python com Django
Introdução ao Python com DjangoIntrodução ao Python com Django
Introdução ao Python com Django
 
Python para Desenvolvedores
Python para DesenvolvedoresPython para Desenvolvedores
Python para Desenvolvedores
 
Programação RAD com Python
Programação RAD com PythonProgramação RAD com Python
Programação RAD com Python
 
Python no Ensino Superior - PyconBrasil 1
Python no Ensino Superior - PyconBrasil 1Python no Ensino Superior - PyconBrasil 1
Python no Ensino Superior - PyconBrasil 1
 
Elementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem PythonElementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem Python
 
Desenvolvimento RAD com Python (Fenasoft)
Desenvolvimento RAD com Python (Fenasoft)Desenvolvimento RAD com Python (Fenasoft)
Desenvolvimento RAD com Python (Fenasoft)
 
Apresentação Python Poli
Apresentação Python PoliApresentação Python Poli
Apresentação Python Poli
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python Poli
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Reduzindo o Overhead Imposto pela Compilação Dinâmica
Reduzindo o Overhead Imposto pela Compilação DinâmicaReduzindo o Overhead Imposto pela Compilação Dinâmica
Reduzindo o Overhead Imposto pela Compilação Dinâmica
 
M2TI - EAIC
M2TI - EAICM2TI - EAIC
M2TI - EAIC
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
 
03 programando em python - comandos basicos
 03   programando em python - comandos basicos 03   programando em python - comandos basicos
03 programando em python - comandos basicos
 
O poder do Python/Django
O poder do Python/DjangoO poder do Python/Django
O poder do Python/Django
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem Python
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3
 
Introdução a programação em python d3 ides
Introdução a programação em python d3  idesIntrodução a programação em python d3  ides
Introdução a programação em python d3 ides
 
Oficina de Python - Tchelinux Livramento 2013
Oficina de Python - Tchelinux Livramento 2013Oficina de Python - Tchelinux Livramento 2013
Oficina de Python - Tchelinux Livramento 2013
 

Ähnlich wie Tdc2010

Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowDevMT
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowGuilherme Campos
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphereEloi Júnior
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)Danilo J. S. Bellini
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracaoRicardo Bolanho
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiaisJosh Santos
 
Sipa sistema interativo
Sipa sistema interativoSipa sistema interativo
Sipa sistema interativoDesiree Santos
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04thomasdacosta
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02thomasdacosta
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)Felipe Meganha
 
Curso de Matlab basico
Curso de Matlab basicoCurso de Matlab basico
Curso de Matlab basicoGabriel Costa
 
Controle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfControle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfCarlosAlexisAlvarado4
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Luciano Ramalho
 
Algoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesAlgoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesRADILSON RIPARDO DE FRETIAS
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 

Ähnlich wie Tdc2010 (20)

Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlow
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlow
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiais
 
Sipa sistema interativo
Sipa sistema interativoSipa sistema interativo
Sipa sistema interativo
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Curso de Matlab basico
Curso de Matlab basicoCurso de Matlab basico
Curso de Matlab basico
 
Controle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfControle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdf
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Algoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesAlgoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizes
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 

Tdc2010

  • 1. Programação Paralela em Python Bibliotecas e Alternativas TDC 2010 Rodrigo Hübner
  • 2. Vamos discutir... ● Arquiteturas Computacionais estão se deslocando para UCP's multicore; ● Softwares precisam explorar o paralelismo subjacente; ● Programação multithreading em Python; ● Bibliotecas existentes... ● Alternativas; ● Conclusões.
  • 3. Exemplo: threading from threading import Thread def minha_funcao(argumento): print argumento t = Thread( target = minha_funcao, args = ('algo',)) t.start()
  • 4. Exemplo: threading Problema! ...Python não é totalmente thread-safe... O que fazer?
  • 5. Exemplos: multiprocessing from multiprocessing import Process def f(nome): print 'Olá', nome if __name__ == '__main__': p = Process(target=f, args=('Rodrigo',)) p.start() p.join()
  • 6. Exemplos: multiprocessing from multiprocessing import Process, Queue def f(q): q.put([42, None, 'hello']) if __name__ == '__main__': q = Queue() p = Process(target=f, args=(q,)) p.start() print q.get() # prints "[42, None, 'hello']" p.join()
  • 7. Exemplo: Parallel Python import math, sys, time, pp def sum_primes(n): return sum([x for x in xrange(2,n) if isprime(x)]) ppservers = () if len(sys.argv) > 1: ncpus = int(sys.argv[1]) job_server = pp.Server(ncpus, ppservers=ppservers) else: job_server = pp.Server(ppservers=ppservers) job1 = job_server.submit(sum_primes, (100,), (isprime,), ("math",)) result = job1() start_time = time.time() inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700) jobs = [(input, job_server.submit(sum_primes,(input,), (isprime,), ("math",))) for input in inputs] for input, job in jobs: print "Sum of primes below", input, "is", job() job_server.print_stats()
  • 9. Exemplos: MPI for Python from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() if rank == 0: data = {'a': 7, 'b': 3.14} comm.send(data, dest=1, tag=11) elif rank == 1: data = comm.recv(source=0, tag=11)
  • 10. Alternativas... ●Jython possui um ótimo desempenho usando threads pois não possui o GIL; ● MPI está implementada em Python. ● Criar novos processos a partir de threads em Python; ●Aproveitar padrões existentes criando novos modelos...
  • 11. Aplicações de modelos... ● Objetivo é aplicar modelos de programação paralela que que facilite o trabalho do programador e que forneça escalabilidade. ●Modelo de programação com fluxos de execução paralelo implícito – TIRT
  • 12. O módulo TIRT ● Cria trabalhadores implícitos; ● Gerenciamento a cargo do ambiente de execução; ● Balanceamento de carga (Roubo de Tarefas) ● Oferece escalabilidade.
  • 14. O módulo TIRT: Implementação ● Anotação de tarefas usando @decorators; ● multiprocessing; ●Gerenciar objetos compartilhados utilizando Managers (multiprocessing); ● NÃO utilizar pré-processamento!
  • 15. TIRT: Exemplos 01 from tirt import task, barrier, get_n_cpu, final, init 02 20 @init 03 @task 21 def matrix_stuff(): 04 def worker(w): 22 # Inicializa a matriz 05 first_row = (w - 1) * HEIGHT + 1 23 06 last_row = first_row + HEIGHT - 1 24 if __name__ == "__main__": 07 barrier() 25 MAX_ITERS = 100 08 for iters in range(1, MAX_ITERS): 26 N = 5000 09 for i in range(first_row, last_row): 27 HEIGHT = N / get_n_cpu() 10 # Processa pontos vermelhos 28 GRID = [] 11 barrier() 29 matrix_stuff() 12 for i in range(first_row, last_row): 30 for i in range(get_n_cpu()): 13 # Processa pontos pretos 31 worker(i+1) 14 barrier() 32 validate() 15 16 @final 17 def validate(): 18 # Faz a validação dos resultados obtidos
  • 16. FIM Obrigado ● Rodrigo Hübner ● rhubner@gmail.com ● @rodrigohubner