Various distractions, plus work on the 9/30 build, have prevented work on a C++ version from achieving any meaningful progress.
But that's okay, because I did put together a
9/30 build. As always, there is
source available.
Some notable changes:
All latch code has been removed. It did not seem to be helping anyone in the most recent builds.
A new set of tests has been introduced. These new tests (sort of) resemble a more-traditional microbenchmark. They isolate a particular instruction inside a fairly-uniform loop structure, rather than groups of related instructions as in the "Awesomeballs" tests. These new tests are much faster, don't loop as often, and has fewer instructions to complete per loop iteration.
So, instead of testing integer adds, mults, and divs in a single loop, we can now test adds in one loop, mults in another, and divs in yet another. Same deal for float.
There is still loop overhead. Attempts to isolate and mitigate that overhead have, thus far, met with failure. Perhaps I'll have more luck with that in future builds. What was supposed to happen was that I was to run an empty loop, time it, and then subtract that amount of time from the time-of-execution for a fully-populated loop with an identical loop structure. Sadly, for a few of the loops, the measured "empty loop" time was longer than the time of execution for the populated loop (leading to a negative corrected time of execution) on some or most runs. I suspect that the populated loops are warming up while the empty loops aren't, which is a bit weird but oh well.
Another issue you will notice is that some of the loops will actually warm up (at least, they will on my Stars test machine). This applies to the new loops, as well as the older loops. I did not observe this behavior on build 9/22, but a good bit has changed since then. In any case, I have not introduced any way to warm up methods quickly before beginning the main program. If you want the "fastest possible" times for any or all of the tests, I recommend running them twice. You will see some increase performance on a few of them (IntegerLoop, for example). It's considerably easier to do this on the new tests since they are so much faster.
Anyway, I'm not going to sweat the loop overhead issue and/or the warmup issues just now.
Eventually I'll move all this to a new, slightly-more-descriptive post, but not just now.
edit: results coming eventually, I'm tired and the E1 is slow. Also,
virscan.org detects no threats inside the .class archive for the 9/30 build.
edit edit:
results for 9/30 build:
Stars chip:
"Awesomeballs" test:
Beginning entire batch.
It took 60318 milliseconds to complete IntegerLoop.
It took 178747 milliseconds to complete FloatLoop.
It took 34547 milliseconds to complete IntegerLoopNoDiv.
It took 98585 milliseconds to complete FloatLoopNoDiv.
It took 190617 milliseconds to complete CastFloatToInt.
It took 103623 milliseconds to complete CastFloatToIntNoDiv.
It took 407643 milliseconds to complete RoundFloatToInt.
It took 271224 milliseconds to complete RoundFloatToIntNoDiv.
It took 415065 milliseconds to complete CastIntToFloat.
It took 130431 milliseconds to complete CastIntToFloatNoDiv.
Total execution time for your selection is 1890800 milliseconds.
Isolated test:
Beginning batch mode (all tests).
It took 19 milliseconds to complete integer addition.
It took 33 milliseconds to complete integer multiplication.
It took 28 milliseconds to complete integer division.
It took 17 milliseconds to complete float addition.
It took 22 milliseconds to complete float multiplication.
It took 8855 milliseconds to complete float division.
It took 13073 milliseconds to complete rounding float to integer.
It took 6586 milliseconds to complete casting float to integer.
It took 25 milliseconds to complete casting integer to float.
Total execution time for your selection is 28658 milliseconds.
Jaguar chip:
"Awesomeballs" test:
Beginning entire batch.
It took 327581 milliseconds to complete IntegerLoop.
It took 586038 milliseconds to complete FloatLoop.
It took 143055 milliseconds to complete IntegerLoopNoDiv.
It took 495517 milliseconds to complete FloatLoopNoDiv.
It took 979270 milliseconds to complete CastFloatToInt.
It took 428087 milliseconds to complete CastFloatToIntNoDiv.
It took 1567989 milliseconds to complete RoundFloatToInt.
It took 1028298 milliseconds to complete RoundFloatToIntNoDiv.
It took 857251 milliseconds to complete CastIntToFloat.
It took 587177 milliseconds to complete CastIntToFloatNoDiv.
Total execution time for your selection is 7000263 milliseconds.
Isolated test:
Beginning batch mode (all tests).
It took 126 milliseconds to complete integer addition.
It took 136 milliseconds to complete integer multiplication.
It took 137 milliseconds to complete integer division.
It took 136 milliseconds to complete float addition.
It took 137 milliseconds to complete float multiplication.
It took 38160 milliseconds to complete float division.
It took 51780 milliseconds to complete rounding float to integer.
It took 29447 milliseconds to complete casting float to integer.
It took 173 milliseconds to complete casting integer to float.
Total execution time for your selection is 120232 milliseconds.