análise estatística e multi threading - Qual linguagem usar?  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
rodrigo.bossini
GUJ Master
[Avatar]

Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline

Oi pessoal,

Estou prestes a começar a trabalhar em um projeto em que vamos aplicar análise estatística sobre uma quantidade razoável de dados. A ideia é desenvolver utilizando multithreading.

As linguagens que estão em pauta são python, c++ e java. O que recomendam? Alguma dessas tem algo pronto pra estatística?

Pesquisei um pouco e vi que existem frameworks para integrar c++ com R. Alguém conhece e pode falar um pouco sobre?

Outra coisa que vi (no head first python) é que não é uma boa ideia usar python para programar com multithreading. Alguém pode comentar sobre isso também?


Rodrigo.

http://www.rodrigobossini.com.br/

Meu Twitter:@rodrigobossini
Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo?
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

rodrigo.bossini wrote:Estou prestes a começar a trabalhar em um projeto em que vamos aplicar análise estatística sobre uma quantidade razoável de dados.


Não quer fazer a análise usando um pacote como o R ( http://www.r-project.org/ ) ? É de graça e muito bom.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Se for usar C++, dê uma olhada:
http://www.boost.org/doc/libs/1_35_0/libs/math/doc/sf_and_dist/html/index.html
http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html

A boost::thread foi incorporada ao C++11, junto com lambda.

Como aplicações estatísticas são geralmente altamente CPU-Bound, recomendo uma linguagem de baixo nível ou um framework específico para isso, principalmente se o volume de dados for gigantesco. É um dos poucos casos que o Java e o Python realmente perdem feio em questão de desempenho.

This message was edited 1 time. Last update was at 05/09/2011 13:30:02


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
rodrigo.bossini
GUJ Master
[Avatar]

Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline

entanglement wrote:
rodrigo.bossini wrote:Estou prestes a começar a trabalhar em um projeto em que vamos aplicar análise estatística sobre uma quantidade razoável de dados.


Não quer fazer a análise usando um pacote como o R ( http://www.r-project.org/ ) ? É de graça e muito bom.


É, tem um pessoal do projeto que já vem usando R. Mas pelo que vi não dá pra programar com threads em R. Vi algo chamado RCPP pra integrar c++ e R. Vou dar uma olhada nisso. Outras sugestões são bem vindas.

http://www.rodrigobossini.com.br/

Meu Twitter:@rodrigobossini
Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo?
rodrigo.bossini
GUJ Master
[Avatar]

Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline

ViniGodoy wrote:Se for usar C++, dê uma olhada:
http://www.boost.org/doc/libs/1_35_0/libs/math/doc/sf_and_dist/html/index.html
http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html

A boost::thread foi incorporada ao C++11, junto com lambda.

Como aplicações estatísticas são geralmente altamente CPU-Bound, recomendo uma linguagem de baixo nível ou um framework específico para isso, principalmente se o volume de dados for gigantesco. É um dos poucos casos que o Java e o Python realmente perdem feio em questão de desempenho.


Gostei! Vou ver isso direito.

http://www.rodrigobossini.com.br/

Meu Twitter:@rodrigobossini
Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo?
deusdara
JavaChild

Membro desde: 26/08/2009 10:53:34
Mensagens: 124
Offline

Vai de C++!
DavidUser
Virtual Machine Man
[Avatar]

Membro desde: 07/03/2009 18:36:36
Mensagens: 539
Localização: Goiânia - GO
Offline

Eu faria os cálculos de complexidade e estatística baseado em algoritmos, depois buscando a melhor linguagem de implementação para o algoritmo selecionado.
Tudo que for feito em baixo nível desde que bem feito tem um desempenho em relação a tempo e memória incrivelmente melhores, mas deve considerar o tempo para implementação, já que escrever código em assembly para solução de problemas complexos leva um tempo consideravelmente maior que a implementação em uma linguagem amigável.
Caso escolha realmente implementar em baixo nível utilize arquitetura CISC é de mais fácil trabalho com paralelismo.

Cursando Engenharia da Computação na PUC-GO
Técnico em Redes de Dados pela FATESG.

"Você é o que você sabe e não o que você tem"
atletica
moscoso.dev
Debugger

Membro desde: 06/07/2011 07:03:19
Mensagens: 66
Offline

Uma alternativa à linguagens pouco "amigáveis" é usar uma linguagem de alto nível com suporte a concorrencia e distribuição embutido na linguagem. Algumas opções são Erlang, Clojure e Scala.
DavidUser
Virtual Machine Man
[Avatar]

Membro desde: 07/03/2009 18:36:36
Mensagens: 539
Localização: Goiânia - GO
Offline

moscoso.dev wrote:Uma alternativa à linguagens pouco "amigáveis" é usar uma linguagem de alto nível com suporte a concorrência e distribuição embutido na linguagem. Algumas opções são Erlang, Clojure e Scala.

Realmente a alternativa para facilitar o trabalho evitando linguagens de baixo nível são as linguagens de alto nível, mas no caso em questão o foco parece ser desempenho, não oque roda o algoritmo que torna a implementação de bom desempenho mas como roda, quando se trabalha em baixo nível eliminando conceitos como OO, OC, OE, OA, etc, pode-se construir um código altamente maleável, não estamos preso a conceitos e linhas de produção então mixamos oque nos parece prudente da forma mais econômica e prudente possível.

No fim das contas todos as linguagens de programação se tornam código de máquina que são refeitos por micro-programas e partem para trilhas físicas. (Segundo argumento do CREA, software é um hardware maleável)
"Não são materiais e sim a forma que se pode utilizar as peças"
"Quando não há forma a criatividade reina e as fraquezas se mostram, cabe ao indivíduo as diminuir a criatividade ou as fraquezas"

Cursando Engenharia da Computação na PUC-GO
Técnico em Redes de Dados pela FATESG.

"Você é o que você sabe e não o que você tem"
atletica
DavidUser
Virtual Machine Man
[Avatar]

Membro desde: 07/03/2009 18:36:36
Mensagens: 539
Localização: Goiânia - GO
Offline

DavidUser wrote:
moscoso.dev wrote:Uma alternativa à linguagens pouco "amigáveis" é usar uma linguagem de alto nível com suporte a concorrência e distribuição embutido na linguagem. Algumas opções são Erlang, Clojure e Scala.

Realmente a alternativa para facilitar o trabalho evitando linguagens de baixo nível são as linguagens de alto nível, mas no caso em questão o foco parece ser desempenho, não oque roda o algoritmo que torna a implementação de bom desempenho mas como roda, quando se trabalha em baixo nível eliminando conceitos como OO, OC, OE, OA, etc, pode-se construir um código altamente maleável, não estamos preso a conceitos e linhas de produção então mixamos oque nos parece prudente da forma mais econômica e produtiva possível.

No fim das contas todos as linguagens de programação se tornam código de máquina que são refeitos por micro-programas e partem para trilhas físicas. (Segundo argumento do CREA, software é um hardware maleável)
"Não são materiais e sim a forma que se pode utilizar as peças"
"Quando não há forma a criatividade reina e as fraquezas se mostram, cabe ao indivíduo as diminuir a criatividade ou as fraquezas"

Cursando Engenharia da Computação na PUC-GO
Técnico em Redes de Dados pela FATESG.

"Você é o que você sabe e não o que você tem"
atletica
moscoso.dev
Debugger

Membro desde: 06/07/2011 07:03:19
Mensagens: 66
Offline

Como você distribui a carga de trabalho em diferentes nós/processadores para serem executados em paralelo em C/C++? Pergunto porque não tenho a menor idéia mesmo, por outro lado é tranquilo ser feito usando linguagens de alto nível.

This message was edited 1 time. Last update was at 26/09/2011 14:50:05

 
Índice dos Fóruns » Outras Linguagens
Ir para:   
Powered by JForum 2.1.8 © JForum Team