[R] Efficiency of C Compiler in "R CMD SHLIB"
Prof Brian Ripley
ripley at stats.ox.ac.uk
Fri Apr 16 08:23:28 CEST 2010
Since the context is missing in this message, from others this is
about 32-bit Windows.
On Thu, 15 Apr 2010, yehengxin wrote:
> Thanks for your response. I found the folder to modify the compiler for C
> source codes. C++ 6.0 is an old C programming environment (1994~1998) but
> it is efficient. When compiling C source codes in C programming
> environment, one needs to choose between "debug" or "release" modes.
That's true for just one family of compilers in my experience.
> "release" mode is much faster than "debug" mode. But in R's "R CMD SHLIB",
> I did not see such an option.
Then I suspect you did not look in the obvioud place (mentioned on
the help page), for I see
% R CMD SHLIB --help
...
Windows only:
-d, --debug build a debug DLL
An optimized ('release') build is standard, and in any case gcc is
capable of both optimizing and including debug information, unlike
some other compilers. With gcc debug code is normally the same speed,
just a larger compiled file.
> I want to try alternative compilers to see if I can reach that level of
> efficiency in R's DLL.
This is *your* DLL, not one in R, surely? Note that people have
compiled R with Visual C++ 6.0 (to use the correct name) and it ran
slower and less accurately than using gcc. So finding VC++ to produce
faster code is not usual, and this seems to be something special about
your C code. The default level of optimization for gcc in R for
Windows is -O3, and you could try raising it: also if you want to
target only recent non-Atom chips set -tune= appropriately.
x86 is a very widely used architecture with a competitive field of
commercial compilers. On Linux (and AFAIK on Windows) gcc produces
some of the best-performing code (see the comments in the 'R
Administration and Installation Manual'). Most of the ways to produce
faster code lose compliance with IEC60559 and accuracy (VC++ 6 never
has those). And the same code compiled with gcc runs on the same
hardware only slightly slower on Windows than on Linux unless I/O is
involved (where Windows is much slower).
> Later, I may try using "OPENMP" in my C codes to do parallel
> computing.
gcc 4.2.1 supports OpenMP, and later versions support it better
(OpenMP 3).
> So I need to figure out how to change compiler to
> generate DLL for R. Could you give me some suggestions? Thanks a lot!
A DLL is a DLL: you can compile it any way you like (although cdecl
calling conventions work best, and compilers do differ in their
conventions for function return values -- but those are not used in
the .C interface). There is a file README.packages in the R
distribution with notes about using other compilers under Windows --
but the R developers have not used other than VC++ and Intel's ICC
(not mentioned there) for several years.
--
Brian D. Ripley, ripley at 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
More information about the R-help
mailing list