Re: [Rd] How to safely using OpenMP pragma inside a .C() function?

From: Simon Urbanek <>
Date: Wed, 31 Aug 2011 17:01:55 -0400


On Aug 31, 2011, at 4:46 PM, pawelm wrote:

> I just found this (performance improvement of the "dist" function when using
> openmp):
> .Internal(setMaxNumMathThreads(1)); .Internal(setNumMathThreads(1)); m <-
> matrix(rnorm(810000),900,900); system.time(d <- dist(m))
> user system elapsed
> 3.510 0.013 3.524
> .Internal(setMaxNumMathThreads(5)); .Internal(setNumMathThreads(5)); m <-
> matrix(rnorm(810000),900,900); system.time(d <- dist(m));
> user system elapsed
> 3.536 0.007 1.321
> Works great! Just the question stays if it's a good practice to use
> "R_num_math_threads" in external packages?


Normally you don't need to mess with all this and I would recommend not to do so. The R internals use a different strategy since they need to cope with the fall-back case, but packages should not worry about that. The default number of threads is defined by the OMP_NUM_THREADS environment variable and that is the documented way in OpenMP, so my recommendation would be to not mess with num_threads() which is precisely why I did not use it in the example I gave you.

That said, R-devel has new facilities for parallelization so things may change in the future.

Simon mailing list Received on Wed 31 Aug 2011 - 21:03:32 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 01 Sep 2011 - 10:00:27 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive