análise estatística e multi threading - Qual linguagem usar?
10 respostas
R
rodrigo.bossini
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?
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.
R
rodrigo.bossini
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.
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.
D
deusdara
Vai de C++!
D
DavidUser
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.
M
moscoso.dev
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.
D
DavidUser
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”
D
DavidUser
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”
M
moscoso.dev
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.