My RAW converter is super-slow: cosplaying as a CPU scheduler on an 12th generation Core processor (or other hybrid asymetric processors)

I upgraded my CPU lately, which was an annoying adventure for a bunch of reasons, but I thought I’d focus on what it’s like to run the same things that were running on a Windows 10 machine with a 7th generation Core and run them on a Windows 10 machine with a 12th generation Core, understanding that the 12th generation Core is a very interesting processor.

I one of my friends said it best:

Me: my prior CPU was an i5-7500 which had 4 real cores that were all equal. This CPU is an i7-12700 which has 8 fast cores that are hyperthreaded, plus 4 slow cores that are slower and single-thread.

Her: So cores and verified cores

We’re in the ”interesting” part of hardware because we’ve blown past a bunch of different limits for making better processors. Single-threaded execution isn’t getting faster at any reasonable rate. We’re reaching the limits of “easy” multi-threaded executions… so everything is going to get weirder and harder still as we go so basically everything has become a parallel programming puzzle previously limited to people running computer simulations of nuclear warheads… combined with a bunch of tricks that were never necessary from the heyday of supercomputing that are necessary to make the whole thing work and not burn up.

A new way to get past some of the hard limits of heat and power efficiency and so on is to make “hybrid” or “asymetric” or “big.LITTLE” processors where some you are delivering a set of powerful fast performance-oriented cores then a set of cores that are slower but much more power-efficient. This ends up being a positive change on the desktop because CPUs are thermally limited these days and so running some of the workloads on a core that dissapates less heat means that you can do more without burning up the CPU and it’s a positive change on the non-desktop marketplace because of battery life.

Obviously, this is kind of like the same thing when we moved past a single core and when we moved past a small number of cores.

For example, it turns out that my RAW converter (DxO Optics) is dramatically slower until I started cosplaying as a CPU scheduler.

As I said, however, I am still using Windows 10. On the other hand, I found a random hardware tech blog that did a bunch of benchmarks on Windows 10 and 11 where they ran the same benchmarks with the E (efficient) cores enabled and disabled. And it looks like, even under Windows 11, there’s some stuff that’s just not performing as fast.

Looking at the actual APIs that Intel suggests you use, most of them are available in prior versions of Windows. But since the 12th generation is the first set of processors that really uses this, I’m assuming that it’s not yet a big enough concern for people to actually dig into the APIs and make sure things work, outside of bleeding-edge users.

So, what did I do to make DxO faster?

I found a blog article that described how to set the CPU affinity so that the specific apps that are both performance sensitive and also tend to be scheduled to the wrong set of CPUs can be tweaked.

I was worried that I was going to be faced with a decision to either upgrade to Windows 11 against my will or do a lot of random hackery, but it seems like this problem was oddly confined to just a few apps that I use. For example, DxO needed it but most of the other CPU-intensive apps I use seem to be fine.

Furthermore, my assumption is that a lot of newer versions of things are just going to either silently or explicitly get patched. I already submitted a bug to DxO over this.

Of course, if you are still holding on to semi-antique things like a legally-purchased real non-subscription version of Creative Suite… things are different and maybe you’ll be wanting to use this trick for much longer?