I want my Processing sketch to run with the CPU close to 100% utilisation, compared with the current 14%.
My Processing sketch trains a neural network for a puzzle where a mouse learns to evade a cat which is pursuing it. I was expecting the CPU to run fast (>80%) through the iterations, but what happens is that it uses almost no CPU: Task Manager shows two processes called Java ™ SE Binary, whose total CPU usage is typically 1 to 5% while the total CPU usage is about 14%. Memory is 76% used (650MB Microsoft Edge, 266 JAVA Platform SE binary, 100 MB Microsoft Word, a few small others).
This programme does calculations only and no drawing (not even setting the canvas background), and does not access any external resources eg a webpage.
My aim is for the programme to run the CPU nearer 100%, which will dramatically reduce the long times currently needed for training.
I have tried:
- Changing the Windows power setting helped: System → power and battery → power mode. Changing to BALANCED or BEST PERFORMANCE had the same result, completing a generation of mice in 40% of the time used when I selected BEST POWER EFFICIENCY, although there is no difference to the total CPU usage or CPU usage by Processing (14% and 2% respectively, the same as when BEST POWER EFFICIENCY is selected).
- Checking whether the programme is doing any unnecessary work (it isn’t).
- Changing the task priority in Task Manager (can’t find how to do it in this version of Windows, but in any case it only makes a difference when the CPU is working hard)
- This post discusses related issues. I don’t understand multiple threads in a programme, but I believe that they wouldn’t help in this case because each generation has to complete before the next one can be calculated. Processing seemingly capped at 35% cpu - Processing - Processing Foundation
The code is something like this:
/* Declarations and initialisations */
void setup () {
size(1,1);
}
void draw() {
for (int generation = 0; generation < maxGenerations; generation++) {
for (int i=0; i< maxIterations && ! mouse[i].finished; i++) {
mouse[i].update();
cat.update();
}
calcualtions_and_reporting_on_completed_generation();
makeNextGenerationOfMiceByCrossoverAndMutation();
}
}