Re: [R-br] Criação de função fortran em pacote (base)

Olá Benilton, tentando passar um exemplo reproduzivel, o experimento em questão executa um script para a obtenção dos valores preditos utilizando os dados do pivo, por meio do pacote geoComp. Nesse script, foram relatados problemas quanto ao tempo de processamento. A função responsável por tais "problemas" foi a função volta.cokri. Dentro dessa função identifiquei que o elevado tempo de processamento se deve à chamada a função eigen. Na eigen, constatei o processamento de grandes matrizes com valores exponenciais. Como minha pesquisa tem foco no processamento paralelo, estou realizando experimentos observando formas de se decompor tais matrizes de forma a realizar uma execução paralela. Em uma das execuções, crio as matrizes m1,m2,m3 e m4, como segue m1 <- mat.cokri[[2]][1:2601,1:2601] m2 <- mat.cokri[[2]][2602:5202,1:2601] m3 <- mat.cokri[[2]][1:2601,2602:5202] m4 <- mat.cokri[[2]][2602:5202,2602:5202] sendo essas sub-matrizes da mat.cokri[[2]] que é uma matriz (5202 x 5202). O que tinha em mente seria a execução paralela de tais matrizes por meio da função mclapply. Nesse experimento, fiz o seguinte: mclapply(1:4, function(i) { g1 <- mvrnorm(n=1, mat.cokri[[1]][1:2601],m1) g2 <- mvrnorm(n=1, mat.cokri[[1]][1:2601],m2) g3 <- mvrnorm(n=1, mat.cokri[[1]][2602:5202],m3) g4 <- mvrnorm(n=1, mat.cokri[[1]][2602:5202],m4) },mc.cores=4 ) Esse seria o procedimento correto? Claro, este sendo um exemplo hipotético, visto que a execução real faz um loop com 1000 iterações. Carlos Beleti.

A linha de comando que vc passou (novamente, nao reproduzivel), executara' uma instancia (1 instancia = as 4 linhas q vc tem dentro do function) de: g1 <- mvrnorm(n=1, mat.cokri[[1]][1:2601],m1) g2 <- mvrnorm(n=1, mat.cokri[[1]][1:2601],m2) g3 <- mvrnorm(n=1, mat.cokri[[1]][2602:5202],m3) g4 <- mvrnorm(n=1, mat.cokri[[1]][2602:5202],m4) em cada nucleo. Note, entretanto, que apenas o resultado de g4 sera' retornado. Se vc quiser o resultado de todos os "g's", adicione a linha a seguir abaixo de g4: list(g1, g2, g3, g4) Agora, serio, se vc quiser ser ajudado, ajude quem se propoe a ajudar e de^ um exemplo reproduzivel. benilton 2012/2/27 Junior Beleti <beleti.junior@gmail.com>:
Olá Benilton,
tentando passar um exemplo reproduzivel, o experimento em questão executa um script para a obtenção dos valores preditos utilizando os dados do pivo, por meio do pacote geoComp.
Nesse script, foram relatados problemas quanto ao tempo de processamento.
A função responsável por tais "problemas" foi a função volta.cokri.
Dentro dessa função identifiquei que o elevado tempo de processamento se deve à chamada a função eigen. Na eigen, constatei o processamento de grandes matrizes com valores exponenciais.
Como minha pesquisa tem foco no processamento paralelo, estou realizando experimentos observando formas de se decompor tais matrizes de forma a realizar uma execução paralela.
Em uma das execuções, crio as matrizes m1,m2,m3 e m4, como segue
m1 <- mat.cokri[[2]][1:2601,1:2601] m2 <- mat.cokri[[2]][2602:5202,1:2601] m3 <- mat.cokri[[2]][1:2601,2602:5202] m4 <- mat.cokri[[2]][2602:5202,2602:5202]
sendo essas sub-matrizes da mat.cokri[[2]] que é uma matriz (5202 x 5202).
O que tinha em mente seria a execução paralela de tais matrizes por meio da função mclapply. Nesse experimento, fiz o seguinte:
mclapply(1:4, function(i) {
g1 <- mvrnorm(n=1, mat.cokri[[1]][1:2601],m1) g2 <- mvrnorm(n=1, mat.cokri[[1]][1:2601],m2) g3 <- mvrnorm(n=1, mat.cokri[[1]][2602:5202],m3) g4 <- mvrnorm(n=1, mat.cokri[[1]][2602:5202],m4)
},mc.cores=4 )
Esse seria o procedimento correto? Claro, este sendo um exemplo hipotético, visto que a execução real faz um loop com 1000 iterações.
Carlos Beleti.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Carlos, Sem querer jogar água na fervura (ainda mais depois do email do Benilton!), mas vc está querendo paralelizar a geração de uma normal multivariada a partir do particionamento do vetor de médias e da matriz de covariâncias? Se for isto mesmo, não creio que este procedimento seja adequado uma vez que vc acaba bagunçando a estrutura de correlação entre as variáveis. Acredito que a forma correta de abordar o problema seria por meio da utilização de uma versão paralelizada de algum algoritmo de decomposição da matriz de covariâncias (Cholesky, SVD, espectral). Att., Rubem

Faltou um "Like" aqui... 2012/2/28 Rubem Kaipper Ceratti <rubem_ceratti@yahoo.com.br>:
Carlos,
Sem querer jogar água na fervura (ainda mais depois do email do Benilton!), mas vc está querendo paralelizar a geração de uma normal multivariada a partir do particionamento do vetor de médias e da matriz de covariâncias? Se for isto mesmo, não creio que este procedimento seja adequado uma vez que vc acaba bagunçando a estrutura de correlação entre as variáveis. Acredito que a forma correta de abordar o problema seria por meio da utilização de uma versão paralelizada de algum algoritmo de decomposição da matriz de covariâncias (Cholesky, SVD, espectral).
Att., Rubem
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (3)
-
Benilton Carvalho
-
Junior Beleti
-
Rubem Kaipper Ceratti