[R-es] Paralelizar el cálculo de distancias

Jose Manuel de los Reyes josemanuel.delosreyes en gmail.com
Lun Ago 14 10:45:36 CEST 2017


Buenas,

lo más sencillo si lo estás corriendo en Linux, puedes usar el comando htop
en la consola para ver todos los procesadores de tu máquina y ver si están
ejecutando trabajos. En windows (yo tengo 7, pero 10 creo que será igual)
puedes abrir el monitor de recursos y activar la pestaña de CPU, en vistas
verás una ventana por cada procesador, y ahí puedes ver rápida y fácilmente
si están corriendo todos tus cores cuando lanzas un proceso en paralelo.

También puedes usar una resta sencilla de sys.time para ver cuánto tarda en
ejecutarse en paralelo respecto a en serie. O usar algún paquete más
complejo de benchmarking.

Saludos

jose

El 13 de agosto de 2017, 23:39, Jesús Para Fernández <
j.para.fernandez en hotmail.com> escribió:

> Cierto, fallo porque puse en el bucle foreach un in en lugar de un =.
>
> Lo que busco es ver si he paralelizado bien el proceso o no.... ¿Como
> puedo saber si lo he paralelizado bien?
>
> Gracias!!!
> Jesús
>
>
> ________________________________
> De: Jorge I Velez <jorgeivanvelez en gmail.com>
> Enviado: domingo, 13 de agosto de 2017 22:51
> Para: Jesús Para Fernández
> Cc: r-help-es en r-project.org
> Asunto: Re: [R-es] Paralelizar el cálculo de distancias
>
> Buenas tardes, Jesús.
>
> Inicialmente no me funcionó tu código.  Al hacer algunas correcciones
>
> foreach(j = 1:nrow(B),.combine="cbind")%:%
> foreach(i = 1:nrow(A),.combine="c") %dopar%{
> sqrt(sum((A[i,]-B[j,])^2))
> }
>
> obtuve una matriz de 10x10.  Es eso lo que buscas?
>
> Saludos,
> Jorge.-
>
>
> 2017-08-13 15:40 GMT-05:00 Jesús Para Fernández <
> j.para.fernandez en hotmail.com<mailto:j.para.fernandez en hotmail.com>>:
> Buenas,
>
>
> Quiero ver si he paralelizado correctamente el proceso. Tengo dos
> dataframes, A y B y quiero calcular la distancia euclídea de todas las
> filas de A sobre todas las filas de B. Para ello he hecho lo siguiente
>
> #cargo las librerias
>
> library(foreach)
>
> library(doParallel)
>
> #establezco el numero de clusters, en mi caso 4, ya que el procesador
> tiene 4 nucleos
>
> cl<-makeCluster(4)
> registerDoParallel(cl)
>
>
> #Creo los dataframes
>
> A<-as.data.frame(matrix(rnorm(50,10,2),ncol=5,nrow=10))
>
> B<-as.data.frame(matrix(rnorm(50,10,2),ncol=5,nrow=10))
>
>
> #calculo las distancias
>
> foreach(j in 1:nrow(B),.combine="cbind") %:%
>
> foreach(i in 1:nrow(A),.combine="c") %dopar% {
>
> sqrt(sum((A[i,]-B[j,])^2))
>
> }
>
>
>
> ¿Cómo lo veis?
>
>
> Un saludo
>
> Jesús
>
>         [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org<mailto:R-help-es en r-project.org>
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>         [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es