Mostrando postagens com marcador OpenCL. Mostrar todas as postagens
Mostrando postagens com marcador OpenCL. Mostrar todas as postagens

outubro 27, 2013

Dica: CUDA no Matlab (and it's free!!!)

Depois da dica para o uso de OpenCL no Matlab, vai aqui uma dica para quem prefere usar a linguagem da Nvidia para programação em placas de vídeo. Os mais espertos e avançados vão se antecipar, dizendo que as versões mais recentes do "Parallel Computing Toolbox" do Matlab já fazem a ponte entre a interface gráfica do Matlab e a computação no GPU. O objetivo deste post é descrever uma solução disponível para quem não tem o toolbox, ou prefere colocar a mão na massa de forma mais explícita, escrevendo MEX-files para otimizar procedimentos mesmo fora do GPU.

Para usar os recursos em CUDA, é necessário estabelecer uma ponte entre o Matlab e a linguagem básica de programação (C/C++, neste caso) e uma segunda ponte, entre a linguagem de programação e o código em CUDA. O primeiro passo é trivial, com o uso de MEX-files escritos para otimizar funções no Matlab (um bom tutorial aqui). Para o segundo passo, a Nvidia parece ter sumido com um pacote simples que fazia exatamente esta ligação.

Felizmente, ainda existem na internet boas almas que compilam pacotes ainda baseados naqueles pacotes originais da Nvidia. Eu descobri neste link um bom pacote com um excelente tutorial sobre como instalar e rodar um primeiro programa em CUDA dentro do Matlab. O tutorial é muito detalhado em termos do que precisa ser feito, funcionou sem problema algum no meu sistema. Ele vai ainda mais longe, ao ensinar como rodar o seu programa em CUDA no Matlab para avaliação no Visual Profiler da Nvidia, e como configurar uma segunda placa de vídeo exclusiva para fins computacionais no Windows 7.

Um detalhe, que me tomou um pouco de tempo para entender, é que os códigos montados pelo pacote não fazem a ponte entre o Matlab e o código em C. Ou seja, a parte do MEX-file dentro do código em CUDA deve ser escrita pelo usuário. Alguns exemplos estão disponíveis na internet, é fácil encontrar. Essencialmente, o arquivo com o kernel (função em CUDA) deve ser adicionado em um arquivo básico MEX, com o kernel chamado dentro do MEX. O MEX deve descrever os inputs, outputs e demais parâmetros da função em CUDA.

Outro detalhe importante, este fundamental para a otimização dos códigos em CUDA: ao contrário do pacote para OpenCL (grande mérito para os criadores da versão OpenCL!!!), não existe uma função específica que controle a transferência de informação entre o CPU e o GPU. Este controle é fundamental, por exemplo, caso seja necessário executar o mesmo kernel diversas vezes em um loop, por exemplo. A ausência do controle em CUDA do fluxo de informação força, ao longo da execução do loop, que todo o conjunto de informação seja passado entre o GPU e o CPU a cada passo do loop, consumindo tempo precioso de execução.

Para contornar este problema, este tutorial (seção 8) ensina como manter as variáveis dentro da GPU em execuções consecutivas do kernel em um loop, além de outras dicas interessantes sobre a integração Matlab-CUDA. Se eu entendi direito (nunca trabalhei com o "Parallel Computing Toolbox" em CUDA), parece que algum truque também é necessário para manter as informações na GPU no pacote oficial do Matlab.

Mais uma vez #ficaadica

junho 01, 2013

Dica: Opencl no Matlab

Estava já pensando em formas de resolver um problema, depois de montar a primeira versão de um novo paper, quando esbarrei em um pacotinho muito interessante para o Matlab: o Opencl-toolbox é um conjunto de arquivos que faz uma ponte entre os kernels de Opencl e o Matlab. Parece muito interessante, apesar de ter pouca documentação. Pode não ser o ideal para quem está iniciando na programação, mas ter a possibilidade de combinar com facilidade a interface gráfica do Matlab com os recursos de paralelismo do Opencl é muito tentador.

E o melhor de tudo: ao contrário de outras soluções disponíveis, é gratuito!

#ficaadica

Saudações!

julho 05, 2012

Novo Paper

A Note on Particle Filters Applied to DSGE Models

Angelo Marsiglia Fasolo


Abstract:

This paper compares the properties of two particle filters – the Bootstrap Filter and the Auxiliary Particle Filter – applied to the computation of the likelihood of artificial data simulated from a basic
DSGE model with nominal and real rigidities. Particle filters are compared in terms of speed, quality of the approximation of the probability density function of data and tracking of state variables. Results show that there is a case for the use of the Auxiliary Particle Filter only when the researcher uses a large number of observable variables and the number of particles used to characterize the likelihood is relatively low. Simulations also show that the largest gains in tracking state variables in the model are found when the number of particles is between 20,000 and 30,000, suggesting a boundary for this number.



Working Paper Series - Banco Central do Brasil - Número 281


Este trabalho começou de forma muito interessante, e até estimulante, já que cada passo exigiu um aprendizado adicional, especialmente sobre paralelismo baseado em GPU. No final, já estava um pouco cheio, não aguentava mais esperar pelos resultados e concluir de uma vez o trabalho, até para partir para algo mais aplicado. Meus agradecimentos especiais para o pessoal da UFRGS, que viu uma apresentação ainda bem preliminar do trabalho, e para o Claudio Shikida, que também recebeu um draft, fez alguns comentários, mas nada que pudesse diretamente ser aplicado para este artigo. No próximo artigo, o nome dele aparece na publicação.

Saudações!

abril 08, 2012

A Figura que Faltou

Para os que assistiram o meu seminário na UFRGS na última quarta-feira (mais uma vez, obrigado ao presentes e aos organizadores), a figura abaixo foi a que faltou na apresentação, por algum motivo foi excluída da versão final:


A figura não deve aparecer na versão final do artigo, mas, como falei, acredito que existe alguma lei dizendo que, se a pessoa apresenta em seminários o filtro de partículas, alguma figura neste formato deve aparecer. A versão acima é a minha versão, e só vou usá-la nos slides mesmo.

Saudações!

UPDATE: pior do que eu esperava - a figura aparecia na versão da apresentação que estava no laptop, mas por algum motivo esta versão não foi copiada para o pen drive. Argh!

fevereiro 01, 2012

janeiro 22, 2012

Aventuras em OpenCL: Mais que Um Segundo

Ok, aqui vai um post longo, cheio de linguagem técnica, mas acho que estava na hora de escrevê-lo. Quando me perguntam, normalmente, em que estou trabalhando agora, esta é a história que eu conto. Envolve um pouco de economia, um tanto de econometria e muita, muita computação. Para quem trabalha com economia, a parte de computação possivelmente diga muito pouco. Para quem trabalha em ciências computacionais, a parte de economia não diz nada, enquanto que a parte de computação pode ser muito básica, trivial até. Para quem tiver paciência, o texto vem a seguir.