[Rcpp-devel] Why inline function is much faster than .Call?
Dirk Eddelbuettel
edd at debian.org
Mon Aug 27 22:44:42 CEST 2012
On 27 August 2012 at 15:17, Peng Yu wrote:
| Hi Dirk,
|
| > inlines uses .Call, so there is a slight logical problem here... And yes,
|
| What is the logical problem?
What inline's cxxfunction() gives you is an object which uses .Call. So it
is a little hard to imagine how that could be faster than using .Call as it
also uses .Call. More likely, it may reflect random fluctuations in your
setup as also suggested by Doug.
| > functions have overheads.
|
| If that is the case, .Call("test", xx) should be faster than test(xx).
| But it is not (see below). This looks wired to me.
See above.
Also, next time you post, please try digits=5 or 6. The 20 digits you show
are entirely spurious.
Dirk
| >
| > | library(microbenchmark)
| > | microbenchmark(test(xx))
| > | microbenchmark(test_inline(xx))
| > | microbenchmark(.Call('test', xx))
| >
| > The normal idiom is a _single_ call so that you can compare:
| >
| > microbenchmark(test(xx), test_inline(xx), .Call('test', xx))
|
| Here is the output.
|
| > microbenchmark(test(xx), test_inline(xx), .Call('test', xx))
| Unit: microseconds
| expr min lq
| median uq
| max
| 1 .Call("test", xx) 94.831999999999993633537 96.090499999999991587174
| 97.557000000000002160050 99.762499999999988631316
| 128.83099999999998885869
| 2 test_inline(xx) 4.440000000000000390799 5.101499999999999701572
| 6.393000000000000682121 6.615000000000000213163
| 30.33899999999999863576
| 3 test(xx) 69.683000000000006934897 70.387500000000002842171
| 71.593500000000005911716 73.153500000000008185452
| 198.30899999999999749889
|
| --
| Regards,
| Peng
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list