You are here
Revolution RevoR Enterprise Benchmark Details
Performance Benchmarks
The benchmarks on this page demonstrate the performance of Revolution R Enterprise 6.1 compared to the base version of R-2.14.2, available from the R Project. The test system was an Intel® Xeon® CPU E31240@3.30GHz 3.30 GHz with 16GB System RAM running 64-bit Windows Server 2008 R2 SP1.
One of the differences between Revolution R products and base R is the ability to leverage multithreading and processor capabilities on all x86 platforms to increase performance. Thus, the more cores available to Revolution R, the higher your performance for many operations.
R-25 Benchmarks
The simple R-benchmark-25.R test script is a quick-running survey of general R performance. The Community-developed test consists of three sets of small benchmarks, referred to in the script as Matrix Calculation, Matrix Functions, and Program Control.
Base R 2.14.2 64 | Revolution R (1-core) | Revolution R (4-core) | Speedup (4 core) | |
Matrix Calculation | 17.4 sec | 2.9 sec | 2.0 sec | 7.9x |
Matrix Functions | 10.3 sec | 2.0 sec | 1.2 sec | 7.8x |
Program Control | 2.7 sec | 2.7 sec | 2.7 sec | Not Appreciable |
Speedup = Slower time / Faster Time - 1 Test descriptions available at http://r.research.att.com/benchmarks
Additional Benchmarks
Revolution Analytics has created its own tests to simulate common real-world computations. Their descriptions are explained below.
Base R 2.14.2 64 | Revolution R (1-core) | Revolution R (4-core) | Speedup (4 core) | |
Matrix Multiply | 124.4 sec | 11.4 sec | 4.4 sec | 27.1x |
Cholesky Factorization | 18.0 sec | 1.8 sec | .6 sec | 29.8x |
Singular Value Decomposition | 37.8 sec | 8.4 sec | 4.6 sec | 7.1x |
Principal Components Analysis | 141.2 sec | 22.4 sec | 11.0 sec | 11.9x |
Linear Discriminant Analysis | 117.0 sec | 39.8 sec | 32.0 sec | 2.7x |
Speedup = Slower time / Faster Time - 1
Matrix Multiply
This routine creates a random uniform 10,000 x 5,000 matrix A, and then times the computation of the matrix product transpose(A) * A.
set.seed (1)
m <- 10000
n <- 5000
A <- matrix (runif (m*n),m,n)
system.time (B <- crossprod(A))
The system will respond with a message in this format:
User system elapsed
37.22 0.40 9.68
The “elapsed” times indicate total wall-clock time to run the timed code.
The table above reflects the elapsed time for this and the other benchmark tests. For the Revolution R benchmarks, the computations were limited to 1 core and 4 cores by calling setMKLthreads(1) and setMKLthreads(4) respectively. Note that Revolution R performs very well even in single-threaded tests: this is a result of the optimized algorithms in the Intel MKL library linked to Revolution R. The slightly greater than linear speedup may be due to the greater total cache available to all CPU cores, or simply better OS CPU scheduling--no attempt was made to pin execution threads to physical cores. Consult Revolution R's documentation to learn how to run benchmarks that use fewer cores than your hardware offers.
Cholesky Factorization
The Cholesky matrix factorization may be used to compute the solution of linear systems of equations with a symmetric positive definite coefficient matrix, to compute correlated sets of pseudo-random numbers, and other tasks. We re-use the matrix B computed in the example above:
system.time (C <- chol(B))
Singular Value Decomposition with Applications
The Singular Value Decomposition (SVD) is a numerically-stable and very useful matrix decomposition. The SVD is often used to compute Principal Components and Linear Discriminant Analysis.
# Singular Value Deomposition
m <- 10000
n <- 2000
A <- matrix (runif (m*n),m,n)
system.time (S <- svd (A,nu=0,nv=0))
# Principal Components Analysis
m <- 10000
n <- 2000
A <- matrix (runif (m*n),m,n)
system.time (P <- prcomp(A))
# Linear Discriminant Analysis
require ('MASS')
g <- 5
k <- round (m/2)
A <- data.frame (A, fac=sample (LETTERS[1:g],m,replace=TRUE))
train <- sample(1:m, k)
system.time (L <- lda(fac ~., data=A, prior=rep(1,g)/g, subset=train))