Jump to content
Pedro C.

Paralelização, gestão de memória e números aleatórios

Recommended Posts

Pedro C.

Olá pessoal,

De momento estou a construir uma biblioteca para a minha área profissional - engenharia geológica - com o objectivo de tornar prototipagem mais fácil para investigação cientifica. Embora a prioridade seja esta (se fosse performance teria necessariamente de fazer noutra linguagem que não Python) gostaria de a tornar mais rápida recorrendo a paralelização e talvez, numa fase posterior, a clustering.

a) Já algum de vocês fez alguma comparação nos módulos de paralelização existentes para Python?

Outra situação preocupante é o consumo de memória.

:D Sabem como ver qual o espaço em memória ocupada por um dado objecto?, e se existem objectos, por exemplo do numpy (arrays especialmente), que sejam especialmente optimizados para optimizar o consumo?

c) Também tenho estado à procura de gerar números aleatórios com semente inclusive "random walks"*. Conhecem alguma maneira (particularmente se tiver boa performance) de o fazer?

*NOTA: o random walk que estou a falar, a titulo de exemplo, é o equivalente a pegar num array de 100 elementos crescente de 0 para 99 só inteiros e sem repetição, e randomizar as suas posições no array. Para quem esteja na área é um random walk para simulação sequencial geoestatistica.

Abraço e desde já agradeço qualquer informação. Se entretanto for descobrindo alguma coisa em digo-o aqui.

Share this post


Link to post
Share on other sites
hmiguel

A paralelização mais obvia será com o fork().

Para a lista de aleatórios, vê lá se é isto que pretendes:

import random

l = random.sample(xrange(100),100)


"Homem que é Homem não usa Java!"

Share this post


Link to post
Share on other sites
NuGuN

Boas!

Bem, para paralelização tens os modulos thread e threading. Eu costumo utilizar esses e ate agora não me tem dado problemas.

P.S.

Em relação à monitoria de memoria vê se guppy serve.

E para a performance vê se o psyco pode ajudar.

Cumps!

Share this post


Link to post
Share on other sites
Pedro C.
Para a lista de aleatórios, vê lá se é isto que pretendes:

import random

l = random.sample(xrange(100),100)

É mesmo isto, obrigado. Tem a desvantagem de devolver uma lista (isto é mau devido à tal história do consumo de memória) mas para primeiro passo chega perfeitamente. Acrescentei apenas a seed para poder reproduzir randomizações:

>> import random
>> random.seed(123)
>> random.sample(xrange(10),10)

Tentei fazer o mesmo utilizando o numpy mas as funções não são compativeis tanto quanto sei. Em relação à paralelização ainda vou experimentar uma ou outra biblioteca se bem que estou particularmente inclinado para a Parallel Python (http://www.parallelpython.com/content/view/15/30/) dada a documentação que dispõe. Mas pretendo também experimentar os que comentaste (thread e threading) visto que são nativos do python (acho eu...).

O guppy não conhecia de todo, mas vou dar uma olhadela. Obrigado.

Share this post


Link to post
Share on other sites
NuGuN

Por curiosidade estive a ver a documentação da Parallel Python que não conhecia e se é aquilo que pretendes, então nenhum daqueles modulos que te indiquei (thread e threading) que são nativos te vai servir. Digo isto porque pelos exemplos que estive a ver no site, pareceu-me que dá um maior nível de abstracção, suporte a clusters, etc. No entanto achei curioso que no exemplo 4 desta página utilizam o modulo thread para fazer Lock's atómicos...

Cumps!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.