On 28/12/2012 00:41, Simon Urbanek wrote:
On Dec 27, 2012, at 6:08 PM, Matthew Dowle wrote:
On 27.12.2012 17:53, Simon Urbanek wrote:
On Dec 23, 2012, at 9:22 PM, Matthew Dowle wrote:
Hi,
Similar questions have come up before on the list and elsewhere but I haven't
found a solution yet.
winbuilder's install.out shows data.table's .c files compiled with -O3 on Win32
but -O2 on Win64. The same happens on R-Forge. I gather that some packages
don't work with -O3 so the default is -O2.
I've tried this in data.table's Makevars (entire contents) :
====
MAKEFLAGS="CFLAGS=-O3" # added
CFLAGS=-O3 # added
PKG_CFLAGS=-O3 # added
all: $(SHLIB) # no change
mv $(SHLIB) datatable$(SHLIB_EXT) # no change
====
but -O2 still appears in winbuilder's install.out (after -O3, and I believe the
last -O is the one that counts) :
gcc -m64 -I"D:/RCompile/recent/R-2.15.2/include" -DNDEBUG
-I"d:/Rcompile/CRANpkg/extralibs215/local215/include" -O3 -O2 -Wall -std=gnu99
-mtune=core2 -c dogroups.c -o dogroups.o
How can I ensure that data.table is compiled with -O3 on Win64?
You can't - at least not in a way that doesn't circumvent the R build
system. Also it's not portable so you don't want to mess with
optimization flags and hard-code it in your package as it's user's
choice how they setup R and its flags. You can certainly setup your R
to compile with -O3, you just can't impose that on others.
Cheers,
Simon
Thanks Simon. This makes complete sense where users compile packages on install
(Unix and Mac, and I better check my settings then), but on Windows where it's
more common for the user to install the pre-compiled .zip from CRAN is my
concern. This came up because the new fread function in data.table wasn't
showing as much of a speedup on Win64 as on Linux. I'm not 100% sure that non
-O3 is the cause, but there are some function calls which get iterated a lot
(e.g. isspace) and I'd seen that inlining was something -O3 did and not -O2.
In general, why wouldn't a user of a package want the best performance from -O3?
Because it doesn't work? I don't know, you said yourself that -O2 may be there
since -O3 breaks - that was not the question, though. (If you are curious about
that, ask on CRAN, I don't remember the answer -- note that Win64 compiler
support is relatively recent).
Compilation with -O3 was not stable, including that some commonly-used
packages segfaulted. x64 Windows is still an under-development platform
for gcc, and a number of issues will not be resolved until at least gcc
4.8.0.
And BTW, -O3 is not the out-of-the-box default for any R build except
i386 Windows, including not for the OS X binary packages. Not sure why
you are singling out Windows here ....
It isn't just a question of optimization level but also what optimizing
options the compiler is built with. We had to discard all the versions
of gcc 4.6.x built with Graphite optimization as they produced far too
unstable code on Windows.
By non portable do you mean the executable produced by winbuilder (or by
CRAN) might not run on all Windows machines it's installed on (because -O3
(over) optimizes for the machine it's built on), or do you mean that -O3 itself
might not be available on some compilers (and if so which compilers don't have
-O3?).
Non-portable as in -O3 may not be supported or may break (we have seen -O3
trigger bugs in gcc before). If you hard-code it, there is no way around it.
The point is that you cannot make decisions for the user in advance, because
you don't know the setup the user may use. I agree that Windows is a bit of a
special-case in that there are very few choices so the risk of breaking things
is lower, but if -O2 is really such a big deal, it is not just your problem and
so you may want to investigate it further.
Remember that even if -O3 works on your package with the current
compiler, it may not with another one. One reason we update the
recommended Windows compiler so infrequently is dealing with all the
fallout from packages which break (almost always because of previously
unrevealed errors in their code). But, for example, we will consider if
we want to change the recommended compiler for R 3.0.0 and it is likely
we will change it during 2013.
--
Brian D. Ripley, rip...@stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel