Feeds:
Posts
Comentários

Posts Tagged ‘computação paralela’

Computação paralela é escrever um programa que executa tarefas de forma simultânea e não de maneira sequencial. Como isso é possível? Muitas rotinas de um programa podem ser divididas, cada pedaço dessa rotina pode ser processada por uma unidade de processamento (CPU) diferente  e ao mesmo tempo. Essas CPUs podem estar num computador (multicore)  ou por CPUs espalhados numa rede de computadores.

Qual é a vantagem? A vantagem é  na velocidade que essa rotina é processada. Se o computador tem 4 núcleos, isso significa que o programa pode ter um aumento de velocidade próximo de 4 vezes. Qual é a desvantagem? O código fica mais complicado, mais cuidado deve ser tomado.

O snowfall é um pacote do R que facilita um pouco o trabalho na hora de escrever um script que executa algum cálculo paralelamente. Abaixo um exemplo simples, comentado.

# example of parallel computing

# Carrega o pacote snowfall
library(snowfall);

# Inicial o snowfall com configuração desejada, dois Cpus, no caso
sfInit(parallel=TRUE,cpus=2);

# variables
listSize <- 100;
scale <- 0.1;

# wrapper é a função que será executada paralelamente
wrapper <- function(iteration){
  numbersList <- scale*iteration
  return(numbersList);
}

# Export global objects para as Cpus
sfExport(list=as.vector(c("scale")));

# divide a tarefa em 2, uma lista para cada processador
jobSplit<-sfClusterSplit(seq(1:listSize));

# entrega o jobSplit para a função wrapper através do sfClusterApply
preListOfNumbers<-sfClusterApply(jobSplit,wrapper);

# como a sfClusterApply devolve uma lista, então a gente unlista
numbersList<-unlist(preListOfNumbers,recursive=FALSE);

# stopping snowfall and Removes all variables
sfRemoveAll();
sfStop();

Note que esse exemplo é simples e existe outros pacotes que ajudam no processamento paralelo. É isso!

Read Full Post »