Skip to content

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

4 messages · Jesús Para Fernández, Jorge I Velez, Jose Manuel de los Reyes

#
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
#
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>:

  
  
#
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
#
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ó: