Efficient programming with R: Some tips to reduce time in...

40
Programming with R Adding Compiled Code Taking Full Advantage of Hardware Conclusions Efficient programming with R: Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares Dept. Statistics and Operational Research UPC- BarcelonaTech Jornades de Consultoria Estad´ ıstica i Software - 2011 CosmoCaixa Barcelona, Setember 26-28th, 2011 J.A.S´ anchez-Espigares Efficient R

Transcript of Efficient programming with R: Some tips to reduce time in...

Page 1: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Efficient programming with R:Some tips to reduce time in computer intensive

programs

Josep A.Sanchez-Espigares

Dept. Statistics and Operational ResearchUPC- BarcelonaTech

Jornades de Consultoria Estadıstica i Software - 2011

CosmoCaixa Barcelona, Setember 26-28th, 2011

J.A.Sanchez-Espigares Efficient R

Page 2: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Outline

Motivation

Programming with R

use fast instructions

Adding Compiled Code

avoid interpretation for recurrent processes

Taking full advantage of hardware

parallelization and GPUs

Conclusions

J.A.Sanchez-Espigares Efficient R

Page 3: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Outline

Motivation

Programming with R

use fast instructions

Adding Compiled Code

avoid interpretation for recurrent processes

Taking full advantage of hardware

parallelization and GPUs

Conclusions

J.A.Sanchez-Espigares Efficient R

Page 4: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Outline

Motivation

Programming with R

use fast instructions

Adding Compiled Code

avoid interpretation for recurrent processes

Taking full advantage of hardware

parallelization and GPUs

Conclusions

J.A.Sanchez-Espigares Efficient R

Page 5: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Outline

Motivation

Programming with R

use fast instructions

Adding Compiled Code

avoid interpretation for recurrent processes

Taking full advantage of hardware

parallelization and GPUs

Conclusions

J.A.Sanchez-Espigares Efficient R

Page 6: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Improvement in processor speed and memory capacity

J.A.Sanchez-Espigares Efficient R

Page 7: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

A combinatorial problem: Distances in a grid

n × n Grid

Two points randomlyselected

Euclidean distancebetween the two points

Which is its expectedvalue?

Combinatorial problem:solve numerically as afunction of n

J.A.Sanchez-Espigares Efficient R

Page 8: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

A combinatorial problem: Distances in a grid

n × n Grid

Two points randomlyselected

Euclidean distancebetween the two points

Which is its expectedvalue?

Combinatorial problem:solve numerically as afunction of n

J.A.Sanchez-Espigares Efficient R

Page 9: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

A combinatorial problem: Distances in a grid

n × n Grid

Two points randomlyselected

Euclidean distancebetween the two points

Which is its expectedvalue?

Combinatorial problem:solve numerically as afunction of n

J.A.Sanchez-Espigares Efficient R

Page 10: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

A combinatorial problem: Distances in a grid

n × n Grid

Two points randomlyselected

Euclidean distancebetween the two points

Which is its expectedvalue?

Combinatorial problem:solve numerically as afunction of n

J.A.Sanchez-Espigares Efficient R

Page 11: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Distances in a grid

For each (x1, y1), (x2, y2) ∈ {1 : n} × {1 : n}calculate d((x1, y1), (x2, y2)) =

√(x1 − x2)2 + (y1 − y2)2

average all those quantities

Analytical Solution:

E (d) =

∑nx1=1

∑nx2=1

∑ny1=1

∑ny2=1

√(x1 − x2)2 + (y1 − y2)2

n4

J.A.Sanchez-Espigares Efficient R

Page 12: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

First approach with R

Four loops and dynamic memory growth

f1 = function(n) {

d = NULL # No elements in d

for (x1 in 1:n) {

for (y1 in 1:n) {

for (x2 in 1:n) {

for (y2 in 1:n) { # Adding a value each step

d = c(d, sqrt((x1 - x2)^2 + (y1 - y2)^2))

}

}

}

}

return(mean(d))

}

Very slow, mainly because of the memory management

J.A.Sanchez-Espigares Efficient R

Page 13: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Second approach with R

Four loops and static memory management

f2 = function(n) {

d = rep(0, n^4) # Initialize d with zeroes

k = 0

for (x1 in 1:n) {

for (y1 in 1:n) {

for (x2 in 1:n) {

for (y2 in 1:n) { #Assign value to position k

d[k <- k + 1] = sqrt((x1 - x2)^2 + (y1 - y2)^2)

}

}

}

}

return(mean(d))

}

Faster, less memory fragmentation

J.A.Sanchez-Espigares Efficient R

Page 14: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Performance of f1 and f2

> system.time(print(f1(10)))

[1] 5.186872

user system elapsed

0.24 0.00 0.23

> system.time(print(f2(10)))

[1] 5.186872

user system elapsed

0.08 0.00 0.08

user: time for user instructions of the calling process

system: time for execution by the system

elapsed: Total R process time (seconds)

J.A.Sanchez-Espigares Efficient R

Page 15: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Performance of f1 and f2

● ● ● ● ● ● ●●

6 8 10 12 14 16 18

010

2030

40

Elapsed time: f1 vs f2

n

seco

nds

0.02 0.03 0.04 0.14 0.25 0.47 0.861.61

2.94

5.22

9.28

16.53

30.09

● ● ● ● ● ● ● ● ● ● ● ● ●

0 0.01 0.03 0.05 0.06 0.1 0.12 0.17 0.25 0.33 0.42 0.53 0.67

f1−dynamicf2−static

It’s better to reservememory in advance!

J.A.Sanchez-Espigares Efficient R

Page 16: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Third approach with R

Avoiding loops by using vectorization

f3 = function(n){

# making all combinations!

combi = expand.grid(1:n,1:n,1:n,1:n)

# operations by columns

d = sqrt((combi[,1]-combi[,3])^2+(combi[,2]-combi[,4])^2)

return(mean(d))

}

Even faster, no loops!

J.A.Sanchez-Espigares Efficient R

Page 17: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Performance of f2 and f3

● ● ●●

●●

6 8 10 12 14 16 18

0.0

0.2

0.4

0.6

0.8

1.0

Elapsed time: f2 vs f3

n

seco

nds

0.01 0.02 0.03 0.040.06

0.090.13

0.18

0.25

0.32

0.42

0.54

0.67

● ● ● ● ● ● ● ● ● ● ● ● ●

0 0 0 0 0 0.01 0.01 0.01 0.01 0.02 0.03 0.03 0.04

f2−loopsf3−vectorization

Vectorial arithmetic isfaster than loops!

J.A.Sanchez-Espigares Efficient R

Page 18: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Fourth approach with R

Using specialized functions

f4=function(n){

# Outer product of arrays with subtract function

# and square

val=outer(1:n,1:n,"-")^2

val2=outer(1:n,1:n,"-")^2

# Outer product of resulting arrays with add function

# and square root

d=sqrt(outer(val,val2,"+"))

return(mean(d))

}

The fastest with efficient primitives (apply-like functions)!

J.A.Sanchez-Espigares Efficient R

Page 19: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Performance of f3 and f4

● ● ● ● ● ●●

6 8 10 12 14 16 18

0.00

0.02

0.04

0.06

0.08

0.10

Elapsed time: f3 vs f4

n

seco

nds

0.001 0.001 0.002 0.002 0.003 0.004 0.0050.008

0.012

0.0180.023

0.032

0.047

● ● ● ● ● ● ● ●●

●●

0 0 0.001 0.001 0.001 0.002 0.003 0.004 0.0050.008

0.0110.015

0.025

f3−vectorizationf4−outer product

Specific primitives areimplemented efficiently!

J.A.Sanchez-Espigares Efficient R

Page 20: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Comparing all variations

15 16 17 18

f1−dynamicf2−static+loopsf3−vectorizationf4−outer product

Comparaison of four apporaches

n

repl

icat

ions

per

sec

ond

020

4060

8010

012

014

0

There are options in Rto do things faster inan easy way!

J.A.Sanchez-Espigares Efficient R

Page 21: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

lm vs. lm.fit

Computer intensive methods

Monte Carlo simulation

Bootstrap

Cross-validation

MCMC

...

Unnecessary instructions penalize computing time.

lm function has an interface from a formula and generate themodel matrix to solve the normal equations by calling lm.fit

J.A.Sanchez-Espigares Efficient R

Page 22: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Parametric Bootstrap: lm vs. lm.fit

n=100; p=5; beta=1:(p+1); s=3

X=cbind(rep(1,n),matrix(runif(p*n),nc=p))

# linear model fit with formula interface

lm1 = function(k){

Y = X\%*\%beta+rnorm(n,sd=s)

coef(lm(Y~X-1))

}

system.time(res1<-apply(matrix(seq(2000)),1,lm1))

# linear model fit on matrices

lm2 = function(k){

Y = X\%*\%beta+rnorm(n,sd=s)

coef(lm.fit(X,Y))

}

system.time(res2<-apply(matrix(seq(2000)),1,lm2))

J.A.Sanchez-Espigares Efficient R

Page 23: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Parametric Bootstrap: lm vs. lm.fit

200 400 600 800 1000

−1

01

23

45

6

Elapsed time: lm vs lm.fit

B

seco

nds

0.41

0.84

1.23

1.66

2.11

2.6

2.98

3.36

3.78

4.25

● ● ● ● ● ● ● ●● ●

0.07 0.11 0.17 0.24 0.28 0.35 0.4 0.45 0.53 0.59

lmlm.fit

lm.fit avoid unnecessaryinstructions!

J.A.Sanchez-Espigares Efficient R

Page 24: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Compiled Code in R

Beyond smarter code the most direct speed gain comes fromswitching to compiled code.

compiler: Transform into byte code

inline: Automated wrapping of single expression

Rcpp: Interface between R and C++

External Fortran/C/C++: Dynamic linking

J.A.Sanchez-Espigares Efficient R

Page 25: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Package compiler

compiler(Luke Tierney): byte code compiler for Rlibrary(compiler)

f2 = function(n) {

d = rep(0, n^4) # Initialize d with zeroes

k = 0

for (x1 in 1:n) {

for (y1 in 1:n) {

for (x2 in 1:n) {

for (y2 in 1:n) { #Assign value to position k

d[k <- k + 1] = sqrt((x1 - x2)^2 + (y1 - y2)^2)

}

}

}

}

return(mean(d))

}

f2c=cmpfun(f2)J.A.Sanchez-Espigares Efficient R

Page 26: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Performance of f2 and f2c

● ● ●●

●●

6 8 10 12 14 16 18

0.0

0.2

0.4

0.6

0.8

1.0

Elapsed time: f2 vs f2c

n

seco

nds

0.01 0.02 0.03 0.040.07

0.090.13

0.18

0.25

0.33

0.42

0.54

0.67

● ● ● ● ● ● ●●

●●

0 0 0.01 0.01 0.02 0.03 0.04 0.05 0.070.09

0.110.15

0.18

f2−loopsf2c−Compiled

Compiled Byte Codeoutperforms interpretedcode!

J.A.Sanchez-Espigares Efficient R

Page 27: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Package inline

inline(Oleg Sklyar et al): can wrap Fortran, C or C++ code

library(inline)

code <- "SEXP m;

float s = 0;

int nt=*INTEGER(n)+1;

for (int a = 1; a < nt; a++)

for (int b = 1; b < nt; b++)

for (int c = 1; c < nt; c++)

for (int d = 1; d < nt; d++)

s += sqrt((a-c)*(a-c)+(b-d)*(b-d));

*REAL(m)=s/(n^4);

return(m);"

f2i <- cfunction(sig=signature(n="integer"), body= code)

J.A.Sanchez-Espigares Efficient R

Page 28: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Rcpp / External Code

Exposing C++ functionality to R is facilitated by the Rcpp

package (Eddelbuettel and Francois)

Explicit constructor/destructor lifecycle of objectsRcpp classes to avoid managing memory directlyData interchange R/C++ is managed by powerful yet simplemechanisms

With external code, it is important to coerce all thearguments to the correct R storage

.C and .Fortran: older and simpler

.Call and .External: less restrictive

J.A.Sanchez-Espigares Efficient R

Page 29: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Parallelization of processes

By default...

...R use only one core

...R reads data into memory

Parallelism: running several computations at the same time, takingadvantage of multiple cores or CPUs

J.A.Sanchez-Espigares Efficient R

Page 30: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Types of parallelization

Implicit parallelism

Set up and distributing data is done by the system.

It is simpler but there is lack of control in the parallel features

Explicit parallelism

User controls the cluster settings.

It requires the user to know the specificities of theimplementation

J.A.Sanchez-Espigares Efficient R

Page 31: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Implicit parallelization: some R Packages

multicore: locally running parallel computations in R onmachines with multiple cores or CPU

pnmath and pnmath0: parallel implementation of mathfunctions

fork: wrappers around the Unix process management APIcalls

Only Unix versions. Not working properly on Windowplatforms

J.A.Sanchez-Espigares Efficient R

Page 32: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Explicit parallelization: Package snow

snow (Simple Network Of Workstations)

Provides an interface to several parallelization packages:

MPI: Message Passing Interface, via Rmpi

NWS: NetWork Spaces via nws

PVM: Parallel Virtual Machine

Sockets via the operating system

They allow intrasystem communication (multiple CPUs), orintersystem communication (cluster)snowfall: Wrapper for snow with an easier interface

J.A.Sanchez-Espigares Efficient R

Page 33: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Package snow. Main functions

makeCluster sets up the cluster and initializes its use

clusterCall calls a specified function with identicalarguments on each node in the cluster

clusterApply takes a cluster, arguments and a function andcalls it with the first element of the list on first node, secondelement on second node...

clusterApplyLB same as above, with load balancing

parCapply, parRapply, parLapply, parSapply parallelversions of column apply, row apply and the other applyvariants

J.A.Sanchez-Espigares Efficient R

Page 34: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Parallelization: Example

Iterating the mean grid distance problem

Repeat 20 times calculation of the mean distance in a 10× 10grid

Record time for each iteration and total time for the wholeprocess

# One thread: by default

(t1 <- system.time(p1 <- unlist(lapply(rep(10,20),

function(el) system.time(f2(el))["elapsed"]))))

J.A.Sanchez-Espigares Efficient R

Page 35: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Package snow and snowfall

# Two Threads: create a cluster with 2 sockets

library(snow)

cl<-makeCluster(2, "SOCK")

clusterExport(cl,"f2")

(t2<- system.time(p2<- parSapply(cl, rep(10,20),

FUN=function(el) system.time(f2(el))["elapsed"])))

stopCluster(cl)

library(snowfall)

sfInit(parallel=TRUE, cpus=2, type="SOCK")

sfExport("f2")

(t3<- system.time(p3 <- sfLapply(rep(10,20),

function(el) system.time(f2(el))["elapsed"])))

sfStop()

J.A.Sanchez-Espigares Efficient R

Page 36: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Performance one vs. two threads

Parcial times for each of the 20 iterations and total time

1 2 3 4 5 6 7

One thread 0.13 0.13 0.13 0.11 0.10 0.11 0.13Two threads 0.11 0.11 0.11 0.11 0.11 0.11 0.12

8 9 10 11 12 13 14

One thread 0.11 0.11 0.11 0.11 0.11 0.11 0.13Two threads 0.12 0.11 0.12 0.11 0.12 0.12 0.12

15 16 17 18 19 20 TOTAL

One thread 0.11 0.10 0.11 0.13 0.11 0.11 2.72Two threads 0.12 0.12 0.11 0.11 0.12 0.11 1.44

J.A.Sanchez-Espigares Efficient R

Page 37: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Explicit parallelization

Sometimes, parallelization of a process can be slower than aserial approach...

Setting up slaves, copying data and code can be very costly

General Rule

”Only parallelize with a certain method if the cost of computationis (much) greater than the cost of setting up the framework.”

J.A.Sanchez-Espigares Efficient R

Page 38: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

GPU

Computing on GPUs (Graphics Programming Units): hardwareacceleration

GPUs are hardware that is optimised for I/O and floatingpoint operations

Much faster code execution than standard CPUs onfloating-point operations

Development environments:

Nvidia CUDA (Compute Unified Device Architecture)Provides C-like programmingOpenCL (Open Computing Language)provides avendor-independent interface to GPU hardware

J.A.Sanchez-Espigares Efficient R

Page 39: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Conclusions

Many statistical analysis tasks are computationally veryintensive

R has enhanced its efficiency by including vectorization orspecific primitives

With computer intensive methods it is important to avoidunnecessary instructions

It is possible to work faster with compiled code

Even parallelization and hardware capabilities can speed upprocesses

J.A.Sanchez-Espigares Efficient R

Page 40: Efficient programming with R: Some tips to reduce time in ...jornades.uab.cat/consultoriaestadistica/sites... · Some tips to reduce time in computer intensive programs Josep A.Sanchez-Espigares

Programming with RAdding Compiled Code

Taking Full Advantage of HardwareConclusions

Questions?

Thank you!

J.A.Sanchez-Espigares Efficient R