local(source("code/08-hardware_cpu_speed.R", local = TRUE))
parallel
package comes with base R
r
library("parallel")
r
detectCores()
Quick Exercise: How many cores do you have?
for
loop can be parallelised is
to ask the question, can the loop be written in reverse and still give the same
answer? {}
for i in N:2
a[i] = a[i-1] + b[i]
would result in a different a
vector, or depending on how a
has been
defined, could crash your program. {}
for i in 1:N
a[i] = monteCarloSimulation()
results in identical results regardless of loop orderThe most common parallel applications to be parallelized are replacements of lapply
, sapply
, and apply
parLapply(cl, x, FUN, ...) parApply(cl = NULL, X, MARGIN, FUN, ...) parSapply(cl = NULL, X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
mc = function(i, ...) runif(1) N = 1
mc
is a Monte-Carlo simulation function. Then we would have something like
r
results = numeric(N)
for (i in 1:N)
results[i] = mc(i)
mc
is a Monte-Carlo simulation function. Then we would have something like
r
results = numeric(N)
for (i in 1:N)
results[i] = mc(i)
for
loop as
r
results = sapply(1:N, mc)
sapply
isn't faster than a standard for
loopcluster
objects and specify the number of threads to generate
r
cl = makeCluster(2)
sapply
to parSapply
r
results = parSapply(cl, 1:N, mc)
r
stopCluster(cl)
vignette("parallel", package = "efficientTutorial")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.