[Rcpp-devel] [small ann] Sparse++

2016-12-30 Thread Dmitriy Selivanov
Hello mailing list. Just small announcement. I made package "sparsepp"
 which brings bindings to header only 'sparsepp' library  -
https://github.com/greg7mdp/sparsepp. It is on CRAN already. Sparse++ is
improvement over google sparse hash library (see this write-up
https://github.com/greg7mdp/sparsepp/blob/master/bench.md).

Initially I evaluated it with my text2vec package, where main data
structure is unordered_map< pair, T >, where T is int
or float.
In my case memory improvement was 2x and speed up was 1.5x (lookup and
insert operations).

So I decided to build small package which can be used by other people (not
text2vec only).

Usage is as usual

   1. add to DESCRIPTION of your package: LinkingTo: sparsepp
   2. add #include  to you source/header
   3. use spp::sparse_hash_map as drop-in replacement for std::unordered_map
   .

-- 
Regards
Dmitriy Selivanov
___
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Re: [Rcpp-devel] [small ann] Sparse++

2016-12-30 Thread Dirk Eddelbuettel

On 30 December 2016 at 15:49, Dmitriy Selivanov wrote:
| Hello mailing list. Just small announcement. I made package "sparsepp"  which
| brings bindings to header only 'sparsepp' library  - https://github.com/
| greg7mdp/sparsepp. It is on CRAN already. Sparse++ is improvement over google
| sparse hash library (see this write-up https://github.com/greg7mdp/sparsepp/
| blob/master/bench.md).
| 
| Initially I evaluated it with my text2vec package, where main data structure
| is unordered_map< pair, T >, where T is int or float.
| In my case memory improvement was 2x and speed up was 1.5x (lookup and insert
| operations).
| 
| So I decided to build small package which can be used by other people (not
| text2vec only).
| 
| Usage is as usual 
| 
|  1. add to DESCRIPTION of your package: LinkingTo: sparsepp
|  2. add #include  to you source/header 
|  3. use spp::sparse_hash_map as drop-in replacement for std::unordered_map.

Thanks, possibly very useful.

Now, should it have at least a 'Suggests: Rcpp' if the example requires it,
\dontrun{} or not?  Also examine whose project you're posting on.

Sure it "could" be used from R without Rcpp.  But how likely is that?
Suggests is for exactly that reason, at least in my book.

Dirk

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
___
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel


Re: [Rcpp-devel] Rcpp Timer

2016-12-30 Thread Dirk Eddelbuettel

On 29 December 2016 at 11:25, Jonathan Christensen wrote:
| Hi Kaspar and Dirk,
| 
| It is indeed cumulative. Previously (presumably when that gallery page was
| written) it was not cumulative, but Romain Francois changed the behavior of 
the
| step() function several years ago, in this commit: 
https://github.com/RcppCore/
| Rcpp/commit/e295b2b178de55291e63705966368404bb0ce5e1.

Nice catch.
 
| There is no indication or reasoning about changing the behavior, so it may be
| that making it cumulative was unintentional.

Let's presume it was intentional to the author of the change -- but as you
rightly point out, it did of course change and reverse previous behaviour.

We could easily add a toggle to the constructor to get an either/or behaviour.

Dirk

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
___
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel


Re: [Rcpp-devel] Rcpp Timer

2016-12-30 Thread Dirk Eddelbuettel

On 30 December 2016 at 06:37, Dirk Eddelbuettel wrote:
| 
| On 29 December 2016 at 11:25, Jonathan Christensen wrote:
| | Hi Kaspar and Dirk,
| | 
| | It is indeed cumulative. Previously (presumably when that gallery page was
| | written) it was not cumulative, but Romain Francois changed the behavior of 
the
| | step() function several years ago, in this commit: 
https://github.com/RcppCore/
| | Rcpp/commit/e295b2b178de55291e63705966368404bb0ce5e1.
| 
| Nice catch.
|  
| | There is no indication or reasoning about changing the behavior, so it may 
be
| | that making it cumulative was unintentional.
| 
| Let's presume it was intentional to the author of the change -- but as you
| rightly point out, it did of course change and reverse previous behaviour.
| 
| We could easily add a toggle to the constructor to get an either/or behaviour.

Even easier:
- Add a step() call immediately after creating timer()
- This also records the start
- Results are still cumulative
- Running diff() over it shows changes:

Demo using minimally modified Rcpp Gallery piece (just added step("start"); )

R> sourceCpp("/tmp/timer.cpp")

R> tt <- useTimer()

R> tt # cumulative
  start get/put g/p+rnorm()  empty loop 
   0.000114 1629.043000 3996.890739 3996.893329 

R> diff(tt)   # incremental
get/put g/p+rnorm()  empty loop 
 1629.04289  2367.84774 0.00259 
R>

I will alter the gallery story accordingly. We can always add a 'zero' step
to the constructor to get these two behaviours cheaply.

Dirk

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
___
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel


Re: [Rcpp-devel] Rcpp Timer

2016-12-30 Thread Romain Francois
It made more sense to track times since an origin, esp when you might use 
several timers in case you use multiple threads. 


> Le 30 déc. 2016 à 13:37, Dirk Eddelbuettel  a écrit :
> 
> 
> On 29 December 2016 at 11:25, Jonathan Christensen wrote:
> | Hi Kaspar and Dirk,
> | 
> | It is indeed cumulative. Previously (presumably when that gallery page was
> | written) it was not cumulative, but Romain Francois changed the behavior of 
> the
> | step() function several years ago, in this commit: 
> https://github.com/RcppCore/
> | Rcpp/commit/e295b2b178de55291e63705966368404bb0ce5e1.
> 
> Nice catch.
> 
> | There is no indication or reasoning about changing the behavior, so it may 
> be
> | that making it cumulative was unintentional.
> 
> Let's presume it was intentional to the author of the change -- but as you
> rightly point out, it did of course change and reverse previous behaviour.
> 
> We could easily add a toggle to the constructor to get an either/or behaviour.
> 
> Dirk
> 
> -- 
> http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
> ___
> Rcpp-devel mailing list
> Rcpp-devel@lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

___
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Re: [Rcpp-devel] Rcpp Timer

2016-12-30 Thread Dirk Eddelbuettel

On 30 December 2016 at 20:38, Romain Francois wrote:
| It made more sense to track times since an origin, esp when you might use 
several timers in case you use multiple threads. 

Using an offset to an origin (and hence differences) is also a sensible way
to deal with higher resolutions.  We cannot natively represent nanoseconds
(which the Timer class uses) in R with base types: doubles use 53 bits
precision which gets us a bit more than microseconds, and ints are 32 bit --
so conversion would be lossy.  (The nanoseconds package I just releases uses
bit64::integer64 which gets us nanosecond, but that is a higher-level depend
and not something we want to depend on at the Rcpp level).

Whether cumulative times, or individual measurements is better is still open
fore debate.  In any event, I fixed the Rcpp Gallery story at

http://gallery.rcpp.org/articles/using-the-rcpp-timer/

Dirk
 
| > Le 30 déc. 2016 à 13:37, Dirk Eddelbuettel  a écrit :
| > 
| > 
| > On 29 December 2016 at 11:25, Jonathan Christensen wrote:
| > | Hi Kaspar and Dirk,
| > | 
| > | It is indeed cumulative. Previously (presumably when that gallery page was
| > | written) it was not cumulative, but Romain Francois changed the behavior 
of the
| > | step() function several years ago, in this commit: 
https://github.com/RcppCore/
| > | Rcpp/commit/e295b2b178de55291e63705966368404bb0ce5e1.
| > 
| > Nice catch.
| > 
| > | There is no indication or reasoning about changing the behavior, so it 
may be
| > | that making it cumulative was unintentional.
| > 
| > Let's presume it was intentional to the author of the change -- but as you
| > rightly point out, it did of course change and reverse previous behaviour.
| > 
| > We could easily add a toggle to the constructor to get an either/or 
behaviour.
| > 
| > Dirk
| > 
| > -- 
| > http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
| > ___
| > Rcpp-devel mailing list
| > Rcpp-devel@lists.r-forge.r-project.org
| > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
| 

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
___
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel