[
https://issues.apache.org/jira/browse/MATH-650?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13204559#comment-13204559
]
Luc Maisonobe commented on MATH-650:
------------------------------------
I finally succeeded in running on my tablet a slightly modified version of
Gilles test (thanks for putting this together Gilles). The test involves
computing 1abs, 10 floor, 30 sin, 30 cos, 50 sqrt, 5 exp, 2 log which is
representative of the small application we developed. The results shown
represent the time for all computation, using only FastMath methods. The tests
were run 10 times, with a fresh start each time.
Android tablet, Nvidia Tegra2 chipset at 1GHz, 1Gb memory, running Android
3.0.1:
* literal arrays: mean 35.1 ms, standard deviation 0.658 ms
* resources loading: mean 55.2 ms, standard deviation 0.651 ms
* table computation: mean 155.4 ms, standard deviation 0.850 ms
Desktop computer, quadcore AMD phenom 9550 quadcore 64 bits at 2.2 GHz, 6 Gb
memore, running Debian Linux wheezy with OpenJDK 6 20.0b12:
* literal arrays: mean 71.4 ms, standard deviation 0.449 ms
* resources loading: mean 70.3 ms, standard deviation 1.731 ms
* table computation: mean 132.9 ms, standard deviation 1.661 ms
These results show that on the Android platform, the gain from precomputed
tables is much larger than on the desktop. In fact, the test runs at least
twice faster on Android than on the desktop for precomputed table, and 17%
slower when tables are computed at startup.
The difference between literal arrays and resources slightly favors literal
arrays on the Android platforms, but on desktop the difference is below
standard deviation. In any case, it is quite small (20 ms) and therefore not
significant as it is a one time startup cost only.
So I would conclude that precomputing the tables is a worthwhile improvement.
Now considering how pre-computed tables should be set up, I have no clear cut
opinion. I would like to not have the tables in the source distribution and
have them generated automatically at build time. It seems to me maven does have
both generate-source and generate-resource goals in its lifecycle, but these
goals are triggered only by specific plugins (antlr, build-helper, ...). These
plugins are not suitable for our case which merely consist in compiling a first
standalone class, then run it to build either the java file or the resource
file.
Any ideas about that ?
> FastMath has static code which slows the first access to FastMath
> -----------------------------------------------------------------
>
> Key: MATH-650
> URL: https://issues.apache.org/jira/browse/MATH-650
> Project: Commons Math
> Issue Type: Improvement
> Affects Versions: Nightly Builds
> Environment: Android 2.3 (Dalvik VM with JIT)
> Reporter: Alexis Robert
> Priority: Minor
> Fix For: 3.0
>
> Attachments: FastMathLoadCheck.java, LucTestPerformance.java
>
>
> Working on an Android application using Orekit, I've discovered that a simple
> FastMath.floor() takes about 4 to 5 secs on a 1GHz Nexus One phone (only the
> first time it's called). I've launched the Android profiling tool (traceview)
> and the problem seems to be linked with the static portion of FastMath code
> named "// Initialize tables"
> The timing resulted in :
> - FastMath.slowexp (40.8%)
> - FastMath.expint (39.2%)
> \- FastMath.quadmult() (95.6% of expint)
> - FastMath.slowlog (18.2%)
> Hoping that would help
> Thanks!
> Alexis Robert
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira