- Apr 27, 2000
- 21,815
- 11,171
- 136
UPDATE
02/27/2015 version now available. Not much different than before, though it isn't as messy. Links below take you to the new version. Virustotal says it's safe.
https://www.virustotal.com/en/file/...2fd9da32f3d5d04f5b169f09/analysis/1425098355/
So I've been plugging away at Mathtester, trying to improve its performance in Java without causing the JVM to start ignoring important code segments by converting them to NOOPs. Things were going along nicely, but then I decided to get fancy. What I did was:
1). unroll the internal loop
2). Switch from using simple integer/float variables in the calculations to using a 128-entry array of integers/floats. Each array entry is randomly generated at the beginning of the program with values ranging from 1 to 1025.
3). Get rid of all '++' incrementation operations.
The JVM started over-optimizing by ignoring a lot of the unrolled loops. Bummer. But the standard IntegerLoop still worked, and it had the curious side-effect of making my A10-7700k run hotter than anything else I had ever run on it. Hotter than Prime95, hotter than linpack, hotter than y-cruncher (the previous champion). I tested it on an E1-2500 and the IntegerLoop code was barely beaten out by y-cruncher (y-cruncher: 62C, IntegerLoop, 61C). Interesting.
So I packaged the unrolled version of IntegerLoop into a new program (also under a BSD 2-clause license) called ChipAbuse. Links!
https://www.dropbox.com/s/lj65iqihiom193c/chipabuseclasses02272015.zip?dl=0
ChipAbuse .class files. Download this, unzip, and run abuseme.bat to run the program under Windows. Any other operating system: you figure it out. Requires Oracle JDK 8 or equivelant (OpenJDK 8?).
https://www.dropbox.com/s/zo1543de0zl2dzr/chipabusesource02272015.zip?dl=0
ChipAbuse source files.
12/30/2014 build:
Both IntegerAbuser and FloatAbuser are now functional, thanks to some timely application of the volatile prefix.
01/28/2015 build:
12/30 build is now essentially obsolete. The code path from that build is present in the newer 01/28/2015 build. The experimental code *might* allow the JVM to translate microcode into SIMD instruction, maybe.
01/31/2015 build:
I've revamped how the code handles ExecutorService creation and initialization. Instead of constantly creating and destroying the ExecutorService periodically (which was a waste of CPU time and caused lulls in heat), I've caused the worker threads to become infinite loops. You now have to hit ctrl-c to end the program. I'm not overly-pleased with this solution, but later on maybe I can set up an event handler or something to take the user back to the main menu after a certain keypress. IF that doesn't compromise the temps generated by the program. Regardless, this version runs a bit hotter, and you should see 100% CPU utilization all of the time.
02/27/2015 build:
I reduced the number of threads created by the program and set it up to close itself properly when you enter 'x' at a prompt instead of having to enter ctrl-c. Otherwise the program runs the same way.
Keep them results coming! The Piledriver results have been interesting.
02/27/2015 version now available. Not much different than before, though it isn't as messy. Links below take you to the new version. Virustotal says it's safe.
https://www.virustotal.com/en/file/...2fd9da32f3d5d04f5b169f09/analysis/1425098355/
So I've been plugging away at Mathtester, trying to improve its performance in Java without causing the JVM to start ignoring important code segments by converting them to NOOPs. Things were going along nicely, but then I decided to get fancy. What I did was:
1). unroll the internal loop
2). Switch from using simple integer/float variables in the calculations to using a 128-entry array of integers/floats. Each array entry is randomly generated at the beginning of the program with values ranging from 1 to 1025.
3). Get rid of all '++' incrementation operations.
The JVM started over-optimizing by ignoring a lot of the unrolled loops. Bummer. But the standard IntegerLoop still worked, and it had the curious side-effect of making my A10-7700k run hotter than anything else I had ever run on it. Hotter than Prime95, hotter than linpack, hotter than y-cruncher (the previous champion). I tested it on an E1-2500 and the IntegerLoop code was barely beaten out by y-cruncher (y-cruncher: 62C, IntegerLoop, 61C). Interesting.
So I packaged the unrolled version of IntegerLoop into a new program (also under a BSD 2-clause license) called ChipAbuse. Links!
https://www.dropbox.com/s/lj65iqihiom193c/chipabuseclasses02272015.zip?dl=0
ChipAbuse .class files. Download this, unzip, and run abuseme.bat to run the program under Windows. Any other operating system: you figure it out. Requires Oracle JDK 8 or equivelant (OpenJDK 8?).
https://www.dropbox.com/s/zo1543de0zl2dzr/chipabusesource02272015.zip?dl=0
ChipAbuse source files.
12/30/2014 build:
Both IntegerAbuser and FloatAbuser are now functional, thanks to some timely application of the volatile prefix.
01/28/2015 build:
12/30 build is now essentially obsolete. The code path from that build is present in the newer 01/28/2015 build. The experimental code *might* allow the JVM to translate microcode into SIMD instruction, maybe.
01/31/2015 build:
I've revamped how the code handles ExecutorService creation and initialization. Instead of constantly creating and destroying the ExecutorService periodically (which was a waste of CPU time and caused lulls in heat), I've caused the worker threads to become infinite loops. You now have to hit ctrl-c to end the program. I'm not overly-pleased with this solution, but later on maybe I can set up an event handler or something to take the user back to the main menu after a certain keypress. IF that doesn't compromise the temps generated by the program. Regardless, this version runs a bit hotter, and you should see 100% CPU utilization all of the time.
02/27/2015 build:
I reduced the number of threads created by the program and set it up to close itself properly when you enter 'x' at a prompt instead of having to enter ctrl-c. Otherwise the program runs the same way.
Keep them results coming! The Piledriver results have been interesting.
Last edited: