Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integração por Rcpp? #15

Open
andrechalom opened this issue Jul 9, 2014 · 11 comments
Open

Integração por Rcpp? #15

andrechalom opened this issue Jul 9, 2014 · 11 comments

Comments

@andrechalom
Copy link
Member

Precisamos verificar se é possível e desejável fazer a integração do código CPP diretamente com R usando o pacote Rcpp (ao invés do "extern C" que estamos usando)

@andrechalom
Copy link
Member Author

OK, de uma olhada breve, esse issue se desdobra nas seguintes questões:

Compilação independente de plataforma?

A compilação do código c++ precisa indicar flags para o compilador a respeito de onde o Rcpp está instalado (assim como já estamos indicando o "-fopenmp", mas ainda não encontrei uma forma segura de passar essas informações.

  • A recomendação é transformar o TWoLife em uma library.
  • Uma alternativa é usar código "inline". Parece mais fácil de atualizar o código se o protótipo da função muda, mas não entendi ainda como fazer pra compilar o paisagem.cpp e o individuo.cpp e "linkar" eles dentro do inline.

Uso de vectors

O c++ tem estruturas muitos melhores do que o c para trabalhar com vetores, por exemplo vector (Já estamos usando um vector de indivíduos, por exemplo, mas podemos passar a usar um vector para tudo o que entra e sai pela interface R, como a paisagem e localização dos indivíduos).

Uso das funções do R

Estamos usando runif e rexp; aparentemente o Rcpp tem uma forma própria de gerenciar essas chamadas de dentro do C++.

  • Removemos os headers de "baixo nível" R.h e Rmath.h
  • Substituímos a chamada para o Random Number Generator por RNGScope scope; (isso pode ser feito globalmente!)
  • As chamadas de função usam a mesma sintaxe que em R: return rnorm(10, 0, 100);
  • update: Isso gera um problema de tipos: rnorm retorna um NumericVector ao invés de retornar um double. Estou colocando uma conversão de tipo em cada chamada aleatória, mas talvez seja melhor usar outra forma de acessar o RNG.

Adaptação da chamada R -> C++

Finalmente, precisamos transformar a chamada da função TWoLife para usar SEXP ao invés de doubles, ints, etc. Essa deve ser a parte fácil (:

@piklprado
Copy link
Contributor

Em nossa reunião ainda não tínhamos certeza se o trabalho valeria à pena. Agora que vc tem uma ideia melhor do trampo, tem também se vale tocar adiante?

@andrechalom
Copy link
Member Author

Olha, a vantagem maior de usar Rcpp é que a gente pode usar a Standard Template Library no código inteiro. Isso quer dizer: nada de ficar alocando memória na mão, nada de ficar se preocupando se paisagem[DIM][DIM] pode ser declarado estaticamente, e a gente poderia (teoricamente pq eu ainda n consegui) usar tipos de dados com "sabor de R" no código C, como List. É um ganho considerável, mas envolve repensar um bocado de coisas.

@piklprado
Copy link
Contributor

Na sua avaliação estas vantagens colocariam este enhancement em qual prioridade?

@andrechalom
Copy link
Member Author

Estou marcando essa issue pra reunião presencial. Acho que precisamos discutir as vantagens e desvantagens com o time.

@andrechalom
Copy link
Member Author

@piklprado
Copy link
Contributor

Ok, um ponto de pauta para a próxima reunião. Quanto tempo de presencial vc estima para batermos o martleo e fecharmos este issue?

@awade2
Copy link
Contributor

awade2 commented Jul 24, 2014

Pessoal, estou meio perdido com esse issue. Não entendo o suficiente para dar uma opinião. Sugiro que se possível, na reunião presencial o Chalom faça uma prévia do problema em questão.

  1. Não entendi a questão do inline
  2. Não entendo as implicações das mudanças no tópico Udo das funções em R.
  3. Não entendi o ultimo tópico. Não haverá mais doubles e ints no código?

Estou me perguntando até que ponto vale a pena mudarmos toda a estrutura que criamos até agora. Qual é o ganho real que teremos com essa mudança? Caso, não seja grande, acho melhor reduzir o nível de prioridade deste issue.

@piklprado
Copy link
Contributor

Pra mim na primeira reunião presencial temos que ler o material que o Chalom enviou e pedir a ele que apresente brevemente pros e contras, for dummies.

@awade2
Copy link
Contributor

awade2 commented Jul 24, 2014

Existe algum tópico em que agendamos as reuniões? Se não, quando podemos marcar? Por mim qualquer dia vale.

@piklprado
Copy link
Contributor

Quando acumularmos indicações de pressenciais o suficiente para uma tarde chamamos uma reunião, q tal?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants