[R] Performance difference between 32-bit build and 64-bit build on Solaris 8
Scott Gilpin
sgilpin at gmail.com
Fri Jun 10 22:57:29 CEST 2005
Hi everyone -
I'm seeing a 32-bit build perform significantly faster (up to 3x) than
a 64 bit build on Solaris 8. I'm running R version 2.1.0. Here are
some of my system details, and some resulting timings:
>uname -a
SunOS lonetree 5.8 Generic_117350-16 sun4u sparc SUNW,Sun-Fire-V440
lonetree /home/sgilpin >gcc -v
Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as
--with-ld=/usr/ccs/bin/ld --disable-nls
Thread model: posix
gcc version 3.4.2
I built the 32 bit version of R with no changes to config.site. I
built the 64 bit version with the following in config.site:
CC="gcc -m64"
FFLAGS="-m64 -g -02"
LDFLAGS="-L/usr/local/lib/sparcv9 -L/usr/local/lib"
CXXFLAGS="-m64 -g -02"
neither build uses a BLAS. Both builds are installed on the same
machine, and the same disk. The machine has virtually no load; R is
one of the only processes running during these timings:
First comparison: solve on a large matrix
>echo 'set.seed(1);M<-matrix(rnorm(9e6),3e3);system.time(solve(M))' |
/disk/loneres01/R-2.1.0-32bit/bin/R -q --vanilla
> set.seed(1);M<-matrix(rnorm(9e6),3e3);system.time(solve(M))
[1] 713.45 0.38 713.93 0.00 0.00
>
>echo 'set.seed(1);M<-matrix(rnorm(9e6),3e3);system.time(solve(M))' |
/disk/loneres01/R-2.1.0-64bit/bin/R -q --vanilla
> set.seed(1);M<-matrix(rnorm(9e6),3e3);system.time(solve(M))
[1] 2277.05 0.31 2278.38 0.00 0.00
>
Second comparison: linear regression
lonetree /home/sgilpin/R >echo 'set.seed(1);
y<-matrix(rnorm(10000*500),500);
x<-matrix(runif(500*100),500);
system.time(fit<-lm(y~x))' | /disk/loneres01/R-2.1.0-32bit/bin/R -q --vanilla
> set.seed(1);y<-matrix(rnorm(10000*500),500);x<-matrix(runif(500*100),500);system.time(fit<-lm(y~x))
[1] 23.34 0.80 24.17 0.00 0.00
>
lonetree /home/sgilpin/R >echo 'set.seed(1);
y<-matrix(rnorm(10000*500),500);
x<-matrix(runif(500*100),500);
system.time(fit<-lm(y~x))' | /disk/loneres01/R-2.1.0-64bit/bin/R -q --vanilla
> set.seed(1);y<-matrix(rnorm(10000*500),500);x<-matrix(runif(500*100),500);system.time(fit<-lm(y~x))
[1] 55.34 0.70 56.21 0.00 0.00
>
Final comparison: stats-Ex.R (from R-devel)
lonetree /home/sgilpin/R >time /disk/loneres01/R-2.1.0-32bit/bin/R -q
--vanilla CMD BATCH stats-Ex.R
real 1m4.042s
user 0m47.400s
sys 0m10.390s
lonetree /home/sgilpin/R >time /disk/loneres01/R-2.1.0-64bit/bin/R -q
--vanilla CMD BATCH stats-Ex.R
real 1m20.017s
user 1m3.590s
sys 0m10.130s
I've seen Prof. Ripley and others comment that a 64 bit build will be
a little slower because the pointers are larger, and gc() will take
longer, but these timings seem out of this range.
Any thoughts?
More information about the R-help
mailing list